Strona główna » Poradniki » Logomocja » LOGIA » Logia 2008/09 - Etap III

Logia 2008/09 - Etap III

· Etap I · Etap II · Etap III ·
iOryginalna treść zadań jest dostępna pod oficjalnym adresem konkursu LOGIA

Zadanie 1 (nawożenie i plony)

Wieś Logianów postanowiła nawozić swoje pola zgodnie z zasadami rolnictwa precyzyjnego. Za pomocą specjalnych kombajnów zbożowych wyposażonych w mierniki plonów zebrano dane o wysokości zbiorów w różnych częściach logianowskich pól. Następnie opracowano wyniki na komputerze, tworząc barwne mapy plonów. Na podstawie mapy plonów stosuje się zabiegi nawożenia roślin polegające na tym, że te części pola, które mogą wydać większy plon otrzymują odpowiednio wyższe nawożenie, natomiast te, które mają mniejszy potencjał otrzymują odpowiednio mniej. Przyjęto trzy poziomy nawożenia: I - minimalne nawożenie, II - średnie, III - najwyższe.

Każde pole ma wymiary :n na :n jednostek. Dzielimy je na prostokątne obszary, ze względu na poziom nawożenia. Położenie oraz poziom nawożenia obszaru określamy za pomocą pięcioelementowej listy liczb całkowitych. Cztery pierwsze liczby wyznaczają przeciwległe narożniki obszaru i mogą przyjmować wartości z zakresu od 0 do :n, piąta liczba określa poziom nawożenia, może przyjmować wartości z zakresu od 1 do 3. Na przykład lista [0 0 1 2 3] oznacza najwyższy stopień nawożenia górnego lewego kwadratu pola i kwadratu poniżej.

Napisz funkcję ILEN :n :mapa, która wyliczy, jakie części logianowskich pól obejmuje każdy ze stosowanych poziomów nawożenia. Parametr :n określa wielkość pola i może przyjmować wartości od 1 do 10, parametr :mapa jest listą złożoną z list określających położenie oraz poziom nawożenia obszarów. Zakładamy, że wszystkie obszary, które nie są wymienione na liście wymagają minimalnego nawożenia, na liście nie ma też sprzecznych danych. Wynikiem funkcji jest trójelementowa lista liczb określających powierzchnię objętą I, II oraz III poziomem nawożenia.

ILEN 4 [[0 0 4 4 2]]jest [0 16 0]
ILEN 3 [[0 0 1 1 3][2 2 3 3 2]]jest [7 1 1]
ILEN 4 [[0 0 1 2 2][0 1 3 2 2][3 3 4 4 3]]jest [11 4 1]

Zadanie 2 (ślimak)

Szyfrujemy słowo zapisując je w formie ślimaka (druga litera nad pierwszą, trzecia po prawej stronie drugiej, czwarta pod trzecią itd. dookoła), a następnie czytamy wierszami od lewej do prawej. Na przykład zapisane w formie ślimaka słowo "abcdefghijklmnopqrstuvwxy odczytamy jako "yjklmxibcnwhadovgfeputsrq.

Napisz funkcję SZYFR :słowa, której daną jest lista słów do zaszyfrowania, a wynikiem jest lista zaszyfrowanych słów według przedstawionego sposobu.

SZYFR [abc defg hijkl]jest [bca efdg ijhkl]
SZYFR [konkurs logia]jest [onkksru oglia]

Zadanie 3 (liczby pierwsze lustrzane)

Asia kontynuuje badanie liczb pierwszych. Przeglądając encyklopedię znalazła następującą definicję: "Liczbami pierwszymi lustrzanymi nazywamy pary różnych liczb pierwszych, z których jedna powstaje przez zapisanie cyfr drugiej w odwrotnej kolejności. Dwucyfrowe lustrzane liczby pierwsze to 13 i 31, 17 i 71, 37 i 73, 79 i 97.". Asia zauważyła, że po sklejeniu dwóch lustrzanych liczb pierwszych otrzymuje liczby będące palindromami (nie zmieniają się, gdy ich cyfry zapiszemy w odwrotnej kolejności): 1331, 1771, 3773, 9779. Asia postanowiła poszukać więcej takich liczb.

Pomóż Asi wyszukać sześciocyfrowe liczby palindromiczne, z których każda powstała przez sklejenie pary trzycyfrowych liczb pierwszych lustrzanych. Napisz funkcję LLLP :n, która zbuduje uporządkowaną rosnąco listę złożoną z :n najmniejszych sześciocyfrowych liczb palindromicznych. Zakładamy, że :n nie przekracza liczby wszystkich sześciocyfrowych liczb palindromicznych.

LLLP 0jest []
LLLP 2jest [107701 113311]

Zadanie 4 (autobusy)

W pewnym mieście, przy pewnym przystanku, pomiędzy godziną 5 a 23, zatrzymują się autobusy dwóch linii autobusowych, o numerach 1 i 2. Autobusy obu linii kursują nie częściej niż co dziesięć minut, a pomiędzy kolejnymi odjazdami autobusów tej samej linii mija parzysta liczba minut.

Rozkład odjazdów jest podany w postaci listy dwuelementowych list i opisuje chronologicznie odjazdy autobusów z dokładnością do jednej minuty. Każda dwuelementowa lista zawiera numer linii i czas odjazdu. Czas odjazdu jest trzycyfrową lub czterocyfrową liczbą, której dwie ostatnie cyfry określają minutę, a pozostałe określają godzinę odjazdu.

Wobec spodziewanego przyjazdu do miasta wielu turystów, prezydent miasta podjął decyzję, że pomiędzy każdymi dwoma odjazdami autobusów tej samej linii pojawi się kolejny, w równym odstępie czasowym od dotychczasowych autobusów tej linii.

Napisz funkcję NRJ :rj, która dla danego rozkładu odjazdów :rj wyliczy nowy rozkład odjazdów, po uwzględnieniu decyzji prezydenta.

Zakładamy, że zarówno dotychczasowy, jak i nowy rozkład odjazdów są tak ułożone, aby w każdej minucie z przystanku odjeżdżał co najwyżej jeden autobus - jeśli pewien dodatkowy odjazd miałby mieć miejsce o tej samej godzinie i minucie, w której odjeżdża z przystanku inny autobus, to odjazd dodatkowego autobusu powinien być o minutę przyspieszony lub opóźniony.

NRJ [[1 700][2 707][1 720]]jest [[1 700][2 707][1 710][1 720]]
NRJ [[1 701][2 710][1 715][2 720]]jest [[1 701][1 708][2 710][2 714][1 715][2 720]]
albo [[1 701][1 708][2 710][1 715][2 716][2 720]]