Logia14 – rok szkolny 2013/2014 – etap - III

Zad. 1. (pokolenia)

Alicja postanowiła przygotować drzewo genealogiczne rodu Logianów. Na kartkach zapisała informacje o pokrewieństwie członków rodu – w postaci par [rodzic dziecko]. Olek, brat Alicji, niechcący rozsypał wszystkie jej notatki. Pomóż uporządkować dane i napisz jednoparametrową funkcję pokolenia, której wynikiem jest lista złożona z głowy rodu oraz list pozostałych członków rodziny podzielonych na kolejne pokolenia: dzieci, wnuki, prawnuki, praprawnuki itd. Lista osób należących do danego pokolenia powinna być uporządkowana alfabetycznie. Parametrem funkcji pokolenia jest niepusta lista złożona z dwuelementowych list imion, których pierwszy element jest imieniem rodzica, a drugi – imieniem jego dziecka. Zakładamy, że każdy członek rodu ma tylko jednego rodzica (za wyjątkiem głowy rodu, która nie ma rodzica).

Przykłady:

Zad. 2. (sześcian)

Sześcian pokrojono otrzymując n x n x n kostek – małych identycznych sześcianów. Kostki ponumerowano liczbami od 1 do n3, kolejno warstwami od góry do dołu, w obrębie warstwy kolejno rzędami od przodu do tyłu, w rzędzie od lewej do prawej.

Napisz dwuparametrową funkcję obok, której pierwszy parametr n określa podział sześcianu (2 ≤ n ≤ 20), a drugi – numer kostki k (1 ≤ k ≤ n3). Wynikiem funkcji jest uporządkowana rosnąco lista numerów kostek stykających się ścianą z kostką o numerze k.

Numerowanie małych sześcianów, przykład dla n=3

Przykłady:

Zad. 3. (roboty)

Dwa roboty chodzą po płaszczyźnie, w każdym kroku przebywają identyczną jednostkową odległość w jednym z czterech podstawowych kierunków: góra, dół, prawo, bądź lewo, które oznaczone są, odpowiednio, literami g, d, p oraz l. Opis trasy każdego robota składa się z ciągu tych liter.

Oba roboty rozpoczynają wędrówkę z tego samego miejsca i chodzą bez końca. Rozważ pierwsze 100 kroków robotów i napisz dwuparametrową funkcję spotkanie, której parametrami są niepuste słowa z opisami tras robotów. Wynikiem funkcji jest liczba określająca, po którym kroku roboty ponownie spotkają się, bądź zero, jeśli takie spotkanie nie nastąpi. Jeśli opis trasy skończy się, to robot wykonuje polecenia ponownie od początku opisu.

Przykłady:

Zad. 4. (załadunek)

Fabryka produkuje wyroby w kolejnych seriach (wszystkie wyroby danej serii są identyczne), a następnie ładuje do samochodów w celu przewiezienia do sklepu.

Napisz dwuparametrową funkcję ilesam, której wynikiem jest minimalna liczba samochodów potrzebnych do przewiezienia wszystkich wyprodukowanych wyrobów. Pierwszy parametr funkcji jest niepustą listą dwuelementowych list, z których każda zawiera informacje o kolejnej serii wyrobów: liczbę wyrobów i masę pojedynczego wyrobu. Drugi parametr jest listą dopuszczalnych ładowności kolejnych przyjeżdżających samochodów.

Zakładamy, że kolejne serie wyrobów ładowane są do samochodów w kolejności wyprodukowania, a samochody ładowane są w takiej kolejności, w jakiej przyjadą. Każdy samochód jest w stanie przewieźć co najmniej jeden wyrób z oczekujących na początku kolejki. Do dyspozycji jest wystarczająco wiele samochodów.

Przykłady: