Zadania trzeciego etapu Mazowieckiego Konkursu Informatycznego dla gimnazjalistów LOGIA 04

Zadanie 1 (Kwadraty).

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 [[][[[]]][[]]].

Zadanie 2 (Kółko i krzyżyk).

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.

Zadanie 3 (Szyfr Cezara).

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].

Zadanie 4 (Listowy kod słowa).

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 [[[[[]]]]].