Zdefiniuj dwuparametrową funkcję AB :n :m, której wartością jest losowo utworzone słowo, złożone z :n liter A i :m liter B. Wywołanie funkcji AB z parametrami odpowiednio :n równym 2 i :m równym 3 zwróci jako wartość jedno z dziesięciu słów, jakie można utworzyć z dwóch liter A i trzech liter B, np. AABBB lub BABAB.
Funkcję AB podzielimy na dwa etapy. W etapie pierwszym będziemy losować literę, którą dopisujemy na koniec wyniku. W każdej iteracji zliczamy ile razy wylosowaliśmy którą litere. Pętle kończymy, gdy licznik którejś litery osiągnie swoje maksimum. Wtedy w ramach drugiego etapu wynik uzupełnimy literą, której licznik jeszcze nie osiągnął maksimum.
(2.) Deklarujemy zmienną :wyraz. Jest to zmienna do której będziemy dopisywać A i B. Następnie (3.) rozpoczynamy pierwszy etap. W pętli dopóki (4.) obydwa liczniki są większe od zera: (6.) losujemy, którą literę dopisujemy. (7.) W zależności od wylosowanej liczby: (8.) dopisujemy A i (9.) zmniejszamy zmienną :n. W przeciwnym wypadku (11.) dopisujemy B i (12.) zmniejszamy licznik :m.
Po wyjściu z pętli nie wiemy, której litery mamy już nie dopisywać. Istnieje możliwość, aby to sprawdzić i dopisać odpowiednią ilość wystąpień drugiej litery. Jednak o wiele prostszym sposobem jest (15. - 18.) dopisywanie A dopóki licznik nie osiągnie 0 oraz (19.- 22.) B póki licznik nie osiągnie 0. (23.) Na koniec zwracamy :wyraz.
Każdą trasę na kwadratowej siatce (n+1)*(n+1), która:
Poniższe rysunki przedstawiają wywołania POPRZEK "ABAABBBAAABBBBAA oraz POPRZEK "ABBBBAAAAABBABBA
Sprawdzanie poprawności wprowadzonego wyrazu polega na sprawdzeniu czy jest tyle samo wystąpień litery A i B:
Deklarujemy liczniki występień (2.) litery A i (3.) B. (4.) Dla każdej litery w :wyraz: (5.) sprawdzamy czy jest A. Jeśli jest to (6.) zwiększamy :licznikA w przeciwnym wypadku (8.) :licznikB.
(11.) Mapę rysujemy tylko wtedy, gdy oba liczniki są równe. (12.) Ustalamy maksymalną wysokość rysunku. (13.) Obliczamy odległość pomiędzy dwoma kropkami w pionie bądź poziomie. (14. - 18.) Przesuwamy pisak w lewy dolny róg rysunku.
(19. - 29.) Rysujemy siatkę złożoną z kropek i (30. - 33.) wracamy z powrotem w lewy dolny róg rysunku.
Przechodzimy do rysowania trasy na wykropkowanej mapie. (34.) Dla każdego elementu z podanego wyrazu :wyraz: w przypadku (35.) wystąpienia litery A (36.) rysujemy pionową kreske. Jeśli jednak litera to B to (38. - 40.) rysujemy kreske poziomą. Pozostaje nam teraz rozpatrzeć przypadek kiedy dane są niepoprawne. Wtedy (44.) wypisujemy tylko odpowiedni komunikat.
Poniższy rysunek przedstawia mapę rzędu 3:
Mapa rzędu n jest kwadratową siatką kropek, utworzoną z 2n+1 poziomych rzędów po 2n+1 kropek w każdym rzędzie. Środkowe punkty na zachodniej, północnej, wschodniej i południowej krawędzi mapy oznaczamy odpowiednio literami W, N, E oraz S.
Trasa WNESW nazywamy każdą trasę na mapie spełniającą trzy warunki:
Mówimy, że trasa WNESW jest regularna, jeśli po jej obrocie o 90o dookoła środka mapy otrzymamy tę samą trasę. Poniższy rysunek przedstawia przykładowe regularne trasy na mapie rzędu 3:
Napisz procedurę TRASA_REG :n, która dla dowolnej wartości parametru :n, nie mniejszej niż 1 i nie większej niż 6:
W celu napisania funkcji TRASA_REG warto napisać funkcję pomocniczą TRASA_REG_pom, która wylosuje trasę. Ze względu na fakt, że trasa ma być regularna to wylosowany ślad będzie powtórzony 4 razy. Podczas losowania trasy należy na bieżąco sprawdzać ile zostało wylosowanych kresek pionowych, a ile poziomych. Jeśli już jednego typu kresek jest maksymalna ilość to losowaną listę należy uzupełnić tylko kreskami drugiego typu.
Wylosowany kod będzie składał się z dwóch literek S i P. W przyjętym zapisie literka P oznacza kreskę naprzód, a literka S kreskę w bok.
Rysowanie trasy najlepiej rozpocząć od narysowania siatki i napisaniu literek kierunku:
(2.) Dostosuj długość odcinka do rysowanej mapy. (3. - 11.) Napisz kierunki świata. (12. - 27.) Narysuj siatkę po której będzie rysowana mapa.
Drugi etap rysowania mapy polega na (31.) wylosowaniu mapy i jej narysowaniu. Należy pamiętać, że raz wylosowana trasa ma zostać narysowana cztery razy:
(28. - 30.) Ustaw odpowiednio żółwia. (31.) Wylosuj trasę. (32. - 43.) Cztery razy narysuj wylosowaną trasę. (34.) W zależności od pobranej literki kodu narysuj odpowiedni odcinek.