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

Zadanie 1 (Kipu).

Kipu to system zapisu liczb i innych danych stosowany przez Indian andyjskich (m.in. w państwie Inków). Polegał on na utrwalaniu danych za pomocą węzłów wiązanych na sznurkach, których sekwencje odchodziły od sznurka głównego (poziomego).

Zdefiniuj procedurę KIPU :słowa, gdzie dana :słowa jest niepustą listą słów złożonych z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), rysującą sznurki z węzłami. Co trzecią literę alfabetu poczynając od a (czyli litery a, d, g itd.) kodujemy węzłem pojedynczym (obrócony kwadrat), co trzecią literę poczynając od b (b, e, h itd.) węzłem podwójnym (dwa kwadraty, wierzchołek drugiego leży w środku pierwszego), pozostałe węzłem potrójnym (trzy kwadraty) – patrz przykłady. Każde kolejne słowo kodowane jest jednym pionowym sznurkiem. Odstępy pomiędzy węzłami-literami są równe przekątnej pojedynczego kwadratu, a odstępy pomiędzy pionowymi sznurkami dwóm przekątnym. Rysunek musi mieścić się na ekranie i spełniać jeden z dwóch warunków: długość sznurka głównego wynosi 600 lub długość najdłuższego pionowego sznurka wynosi 400.

Powyżej widać efekty wywołań KIPU [a b c abc] oraz KIPU [ala ma kota].

Zadanie 2 (Prostokąty).

Zdefiniuj procedurę PROS :lista :s :w rysującą na środku ekranu ciąg prostokątów. Danymi procedury są: :lista - niepusta lista słów składających się z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), z których każde zawiera co najmniej jedną samogłoskę i co najmniej jedną spółgłoskę, :s - określa szerokość rysunku, a :w - określa wysokość rysunku. Kolejne prostokąty odpowiadają kolejnym słowom. Dolne boki prostokątów stanowią dolną krawędź rysunku. Dwa sąsiednie prostokąty mają wspólny fragment jednego z pionowych boków. Szerokości poszczególnych prostokątów są proporcjonalne do liczby spółgłosek w poszczególnych słowach. Wysokości poszczególnych prostokątów są proporcjonalne do liczby samogłosek w poszczególnych słowach.

Poniżej widać efekty wywołań PROS [ala ma kota] 222 111 oraz
PROS [abrakadabra hokus pokus] 360 111.

Zadanie 3 (Zliczanie).

Zdefiniuj funkcję ILEL :lista, gdzie dana :lista jest dowolną listą. Zadaniem funkcji jest analiza wszystkich małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych), występujących w zapisie danej :lista. Podczas tej analizy wszystkie pozostałe znaki są pomijane. Wynikiem funkcji jest lista dwuelementowych list zawierających literę i liczbę jej wystąpień w danej :lista. Kolejność elementów w liście wynikowej wynika z kolejności liter w alfabecie. Jeśli jakaś litera nie występuje w danej :lista, to w wynikowej liście stosowny element jest pomijany.

WynikiemILEL [alamakota] jest [[a 4][k 1][l 1][m 1][o 1][t 1]].
WynikiemILEL [abrakadabra [] [[[] hokus] pokus]] jest [[a 5][b 2][d 1][h 1][k 3][o 2][p 1][r 2][s 2][u 2]].

Zadanie 4 (Scalanie).

Zdefiniuj funkcję SCALAJ :listyliczb, gdzie dana :listyliczb jest niepustą listą uporządkowanych niemalejąco list liczbowych. Wynikiem funkcji jest uporządkowana niemalejąco lista ze scalonymi liczbami z list danej :listyliczb.

WynikiemSCALAJ [[2 4 6 8 10][1 3 5][1 2 3]] jest [1 1 2 2 3 3 4 5 6 8 10].
WynikiemSCALAJ [[3 4 5][1 2][6]] jest [1 2 3 4 5 6].