Kolejnym literom alfabetu łacińskiego odpowiadają obrazki przedstawione na rysunkach poniżej:
Napisz dwuparametrową procedurę/funkcję szyfruj, której efektem wywołania jest rysunek odpowiadający słowu (pierwszemu parametrowi funkcji). Słowo składa się z małych liter alfabetu łacińskiego (od 2 do 20 znaków). Drugi parametr to liczba naturalna (od 2 do 20), oznaczająca wysokość tworzonych schodków. Rysunek powinien być na środku ekranu i mieć kształt schodków, jak w przykładach. Szerokość rysunku wynosi 760 lub wysokość wynosi 480.
Rozpocznijmy omawianie rozwiązanie od rysowania pojedynczego elementu. Jak wynika z rysunku kolejne elementy zielony są rysowane po spirali - w prawo i do środka. Można zauważyć, że przed zmianą kierunku rysowania najpierw trzeba przejść 5, potem 4, 4, 3, 3,.. elementów. Podane wielkości można zapamiętać (2.) na liście. Następnie (3.) zielonych elementów będzie tyle co odległość danej litery od litery a. Następnie przyjmujemy, że (4.) rysujemy pierwszy kwadrat elementu.
(5.) Dalsza część kodu polega na pobieraniu kolejnej ilości i (6. - 17.) narysowaniu tylu kwadratów w lini prostej, a potem (18.) obrotu w prawo, aby narysować kolejny fragment. Na koniec (20. - 21.) należy wrócić do punktu wyjścia.
Teraz można przejść do głównej procedury. Na początku należy (2. - 10.) wyliczyć rozmiar pojedynczego kwadratu, który będzie narysowany. W tym miejscu należy pamiętać, że trzeba wybrać dopasowanie do określonej wysokości lub szerokości. Potem wystarczy (11. - 14.) przejść do lewego, dolnego rogu rysunku.
(15.) Dla każdego elementu ze słowa: (16.) pobierz element, (17. - 27.) narysuj wszystkie kwadraty w pionie wstawiając w odpowiednie miejsce kwadrat szyfrujący. Następnie (28. - 38.) odpowiednio wylicz wysokość na której znajduje się kolejny kwadrat szyfrujący. Polega to na tym, że zmienna :wDół określa kierunek przejścia i jeśli dojdziemy do krawędzi to zmieniamy kierunek na przeciwny. Po narysowaniu każdej kolumny (39. - 40.) przejdź do następnej.
Robot chodzi po płaszczyźnie, w każdym kroku przebywa 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.
Napisz funkcję poler, której parametrem jest słowo określające trasę robota, a wynikiem – pole najmniejszego prostokąta, o pionowych i poziomych bokach, zawierającego całą trasę.
poler "ggdp | jest 2 |
---|---|
poler "lllgpdddd | jest 12 |
Wyznaczenie najmniejszego pola polega na wyznaczeniu jak daleko robota zajdzie w każdym z czterech kierunków. W tym celu przyjmijmy, że (2. - 7.) wszystkie wartości początkowo wynoszą zero.
Potem (9. - 34.) w zależności od kierunku przesunięcia aktualizujemy aktualną pozycję robota (x, y) i jeśli zmieni się któryś z parametrów min/max to go zmieniamy. Na koniec (36.) należy zwrócić iloczyn różnic dla każdej współrzędnej pomiędzy wartością maksymalną i minimalną.
Gwiazdowo ma promienistą strukturę ulic, co powoduje, że z każdej dzielnicy istnieje tylko jedna droga do Centrum. Każdy mieszkaniec zna drogę i koszt dojazdu ze swojej dzielnicy do Centrum. Są one zakodowane słowem składającym się z par złożonych z litery oznaczającej dzielnicę i cyfry określającej koszt przejazdu kolejnego odcinka. Na przykład, jeśli takim kodem jest D3E5J8, to odczytujemy, że łączny koszt dojazdu z D do Centrum to 3+5+8=16.
Napisz dwuparametrową funkcję kosp, której wynikiem jest minimalny koszt zorganizowania spotkania dwóch mieszkańców miasta (czyli łączny koszt ich dojazdu do określonej dzielnicy). Oba parametry są słowami, oznaczającymi drogę i koszt dojazdu do Centrum, odpowiednio, każdego z dwóch mieszkańców.
kosp "D3E5J8 "H3I2E4J6 | jest 8 (wyjaśnienie rys. 1) |
---|---|
kosp "A3T5U6 "B4G1Y4 | jest 23 (wyjaśnienie rys. 2) |
Zadanie można podzielić na dwie części: pierwsza z nich polega na wyznaczeniu miejsca spotkania, a druga na zsumowaniu wartości przebycia z punktu początkowego do drugiego. Wynik końcowy to suma wartości przejazdu jednego i drugiego mieszkańca do wyznaczonego wcześniej punktu docelowego.
W celu wyznaczenia miejsca spotkanie należy sprawdzić, który element się powtarza na obu opisanych trasach. Realizuje to poniższy kod:
Funkcja kosp_sumuj sumuje koszt przejazdu z punktu początkowego do punktu spotkania.
Główna funkcja kosp to zaledwie dwie linijki, ponieważ w pierwszej wyznaczamy punkt docelowy spotkania, a w drugiej sumujemy koszt przejazdu dla każdego z mieszkańców.