Logia05 – rok szkolny 2004/2005 – etap - III
Zad. 1. Zdefiniuj procedurę KWADRATY :lista rysującą na ekranie ciąg kwadratów. Dana :lista jest listą list. Każdy element danej :lista jest listą pustą lub listą jednoelementową zbudowaną analogicznie, tj. też jest listą pustą lub jednoelementową. Liczba elementów danej :lista określa liczbę rysowanych kwadratów. Każdy kwadrat może zawierać wewnętrzne kwadraty, zależnie od poziomu zagłębień listy opisującej kwadrat. Odstępy pomiędzy współśrodkowymi kwadratami są takie same i równe długości boku najmniejszego z nich. Długości boków wszystkich zewnętrznych kwadratów są takie same i możliwie duże, tak żeby wszystkie kwadraty mieściły się na ekranie. Odstępy pomiędzy sąsiednimi zewnętrznymi kwadratami są równe jednej piątej długości boku zewnętrznych kwadratów.
Poniżej widać efekty wywołań, kolejno:
- KWADRATY [[[]][]] oraz
- KWADRATY [[][[[]]][[]]].
Zad. 2. Zdefiniuj funkcję KK :gra, której daną jest niepusta lista dziewięcioliterowych słów. Każde słowo opisuje układ kółek i krzyżyków w popularnej grze "kółko i krzyżyk" na planszy 3 na 3 pola - wierszami (tzn. trzy pierwsze znaki opisują pierwszy wiersz planszy, itd.). W słowach mogą występować tylko małe litery x, o oraz w. Oznaczają one: x - krzyżyk na danym polu, o - kółko na danym polu, zaś w - wolne pole. Zakładamy poprawność danych słów, tzn. każde z nich opisuje możliwy układ w czasie gry. Zakładamy także, że żadne ze słów nie opisuje sekwencji wygrywającej.
Wartością funkcji KK jest prawda, jeśli dana lista :gra opisuje możliwą sekwencję kolejnych układów w czasie gry, zaś fałsz - w przeciwnym przypadku.- Wynikiem KK [xwxoxooww] - jest prawda.
- Wynikiem KK [xwxoxooww xwxoxooxw xwxoxooxo] - jest prawda.
- Wynikiem KK [wwxoxooww xwxoxooxw] - jest fałsz.
- Wynikiem KK [wwwwwwwww wwwwxwwww owwwxwwww oxwwxwwww] - jest prawda.
Zad. 3. Zdefiniuj funkcję DESZYFR :zaszyfr :klucz1 :klucz2, której danymi są:
- :zaszyfr - poprawnie zaszyfrowane słowo, składające się z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), nie dłuższe niż siedmioliterowe,
- :klucz1 - jednocyfrowa liczba określająca klucz szyfrowania samogłosek,
- :klucz2 - jednocyfrowa liczba określająca klucz szyfrowania spółgłosek.
Wynikiem funkcji jest lista zawierająca wszystkie możliwe słowa, które po zaszyfrowaniu dają :zaszyfr. Kolejność słów w wyniku jest nieistotna. Przyjęty sposób szyfrowania to modyfikacja jednego z najstarszych znanych systemów kodowania, przypisywanego Juliuszowi Cezarowi. Polega on na zastąpieniu każdej kolejnej litery - literą występującą w alfabecie o określoną liczbę pozycji dalej, cyklicznie (tj. jeśli wykraczamy poza alfabet, to kolejne litery bierzemy z początku alfabetu). W naszym zadaniu tę liczbę pozycji, oddzielnie dla samogłosek i spółgłosek, określają klucze szyfrowania funkcji DESZYFR.
- Wynikiem DESZYFR "fycmqva 2 2 - jest [dwakoty].
- Wynikiem DESZYFR "epi 4 3 - jest [ame amf bme bmf].
Zad. 4. Zdefiniuj funkcję LKS :słowo, której daną jest słowo składające się z małych liter alfabetu łacińskiego i cyfr. Wynikiem funkcji jest lista, której kolejne elementy odpowiadają kolejnym znakom danej. Litery kodujemy listami: literę a - listą pustą, literę b - listą składającą się z listy pustej, literę c - listą [[[]]], itd. według pozycji poszczególnych liter w alfabecie. Cyfry danej :słowo są bezpośrednio umieszczane w wyniku - bez kodowania.
- Wynikiem LKS "c3ba - jest [[[[]]] 3 [[]] []].
- Wynikiem LKS "a37ba - jest [[] 3 7 [[]] []].
- Wynikiem LKS "d - jest [[[[[]]]]].