Wojtek koduje rysunki złożone z kwadratów za pomocą napisów. Kolejne znaki kodu oznaczają numery wierszy i nazwy kolumn, w których kwadraty są zamalowane. Numery wierszy i nazwy kolumn są podane w porządku rosnącym. Na przykład kod 1BCD2AC3BD4ABC5B oznacza, że w pierwszym wierszu są zamalowane kwadraty w kolumnach B, C i D, wdrugim w kolumnach A i C itd. Zdefiniuj jednoparametrową procedurę/funkcję kod, po wywołaniu której powstanie siatka zamalowanych kwadratów zakodowanych przez Wojtka. Parametrem jest słowo określające kod. Minimalna liczba wierszy wynosi 8, maksymalna 26, a kolumny są oznaczane wielkimi literami alfabetu łacińskiego od A do M. Po każdej liczbie występuje co najmniej jedna litera. Liczba wierszy i kolumn jest wyznaczona przezostatni zamalowany kwadrat odpowiednio nadole orazz prawej strony rysunku. Wysokość rysunku jest stała i wynosi 468. Rysunek powinien być na środku ekranu.
Zadanie należy podzielić na dwa etapy. W pierwszym etapie należy przeanalizować wczytane dane i ewentualnie przetworzyć je na prostsze, aby łatwiej na ich podstawie narysować rysunek. W drugim etapie zostanie narysowany rysunek.
Na początku deklarowana jest lista cyfr oraz liter. Następnie przyjmujemy, że obrazek początkowo ma długość i szerokość zerową. Na końcu danych wstawiamy wartownika w postaci znaku #. Dopóki nie dojdziemy do wartownika to w pętli odczytujemy liczbę, a następnie wszystkie następujące litery. Każdy odczytany znak jest od razu usuwany z danych. Dodatkowo w pętli aktualizowany jest aktualny rozmiar siatki.
Drugi etap rozpoczynamy od obliczenia boku kwadratów z których składa się z siatka. Następnie rysowana jest siatka. Podczas rysowania konkretnego kwadratu algorytm sprawdza czy jego pozycja znajduje się na liście. Jeśli tak to zostaje on dodatkowo zamalowany.
Bitowo Dolne ma jedną linię tramwajową z m przystankami. Przystanki oznaczone są kolejnymi wielkimi literami alfabetu łacińskiego. Tramwaj wyrusza z przystanku oznaczonego literą Aizatrzymuje się na co n-tym przystanku, naktórym jeszcze nie stawał. Tramwaj porusza się ruchem wahadłowym, czyli po dotarciu do krańcowego przystanku zawraca. Twoim zadaniem jest ustalenie rozkładu jazdy tramwaju.
Napisz dwuparametrową funkcję o nazwie tram, której parametrami są dwie liczby naturalne, odpowiednio m i n. Wynikiem jest słowo określające kolejne przystanki, na których tramwaj zatrzymuje się. Pierwszy parametr może przyjmować wartości od 1 do 26, a drugi od 1 do 1000.
tram 6 5 | EADCBF |
---|---|
tram 4 7 | ADCB |
Pierwszy etap polega na przygotowaniu listy przystanków. Do kontrolowania kierunku jazdy tramwaju używana jest zmienna kierunek, a aktualny przystanek wskazuje teraz. Następnie pętla jest wykonywana dopóki wszystkie przystanki nie znajdą się w rozkładzie. Pętla polega na przesuwaniu się po przystankach, aż minie m nieodwiedzonych przystanków. Po dotarciu na przystanek należy dołączyć do rozkładu aktualnie odwiedzony przystanek.
Ania konstruuje pajęczaki i opisuje swoje projekty przy pomocy słów złożonych z wielkich liter Z, J, D, T. Pajęczaki są zbudowane z rozgałęziających się węzłów, jedna litera określa jeden węzeł. Litera Z (zero) oznacza, że dany węzeł nie ma rozgałęzień, J (jeden), D (dwa), T (trzy), że z węzła wychodzą odpowiednio jedna/dwie/trzy gałęzie. Środek pajęczaka to pierwsza litera jego opisu, następne opisują jego rozgałęzienia w głąb.
Napisz jednoparametrową funkcję stp, której parametrem jest niepuste słowo o długości conajwyżej 100 opisujące pajęczaka. Wynikiem jest stopień pajęczaka, czyli liczba węzłów od środka do najdalszego węzła.
Najprostszym rozwiązaniem tego zadania jest zastosowanie rekurencji. Funkcja będzie wywoływać samą siebie i zwracać dwa argumenty: znalezioną długość i aktualny stan ścieżki. Podczas każdego wykonania funkcji usuwamy pierwszy znak z danych i go analizujemy. Jeśli natrafimy na Z to zwracamy długość 1. Jeśli na jakikolwiek inny znak to funkcja wywoła samą siebie odpowiednie J (jeden), D (dwa) lub T (trzy) razy. Podczas każdego wywołania należy pamiętać o aktualizacji danych i wybraniu najdłuższej ścieżki pośród wszystkich X rozgałęzień.
Funkcja stp ma za zadanie zwrócić tylko długość, więc dodatkowo piszemy funkcję, która wywoła rekurencyjną wersję i zwróci odpowiedni element.