Zadania trzeciego etapu Mazowieckiego Konkursu Informatycznego 2000

Zadanie 1. Kod MKI

Tabela kodów MKI
znakkod znaku
a0000
b0001
c0010
d0011
e0100
f0101
g0110
h0111
i1000
j1001
k1010
l1011
m1100
n1101
o1110
p1111

MAZOWIECKI URZĄD SZYFRÓW posługuje się (do zapisywania tajnych informacji) alfabetem składającym się tylko z 16 znaków - małych liter od a do p. W celu usprawnienia przetwarzania dokumentów utworzył własny system cyfrowego kodowania znaków, tzw. kod MKI, w którym każdej literze odpowiada czterobitowe słowo (patrz tabela).
Ustalano następujący system szyfrowania znaków, słów oraz zdań:

  1. Szyfrem znaku x (gdzie x oznacza dowolny znak od a do p) jest taki znak, którego kod MKI jest symetrycznym odbiciem (przestawieniem wspak) kodu znaku x.
  2. Szyfrem słowa s jest takie słowo, którego każdy znak jest szyfrem odpowiedniego znaku słowa s.
  3. Szyfrem zdania z (listy słów) jest takie zdanie, którego każde słowo jest szyfrem odpowiedniego słowa zdania z.

Zdefiniuj funkcję SZYFR :zd, której wynikiem dla dowolnego zdanie utworzonego ze słów w alfabecie od a do p jest szyfr tego zdania utworzony zgodnie z ustalonymi wyżej zasadami.

Przykładowe wyniki:

SZYFR [ala nie ela] powinno dać wynik [ana lbc cna]
SZYFR [moja lalka] powinno dać wynik [dhja nanfa]

Zadanie 2. Kody flagowe

Dwie przekątne kwadratu dzielą go na cztery ćwiartki. Zamalowując różne kombinacje tych ćwiartek możemy otrzymać 16 różnych wzorów, których możemy używać jako wizualnych kodów flagowych 16 elementowego alfabetu od a do p. Ustalamy następujący system wizualnego kodowania liter alfabetu od a do p w postaci flag.

Kodem flagowym słowa będzie odpowiednia sekwencja kodów flagowych kolejnych znaków.
Kodem flagowym zdania będzie sekwencja, umieszczonych kolejno jeden pod drugim i wyrównanych do lewego brzegu kodów słów tworzących zdanie.

Zdefiniuj procedurę FLAGI :zd, która dla dowolnego danego zdania :zd wyświetla na środku ekranu jego kod na tle szarego prostokąta. Zakładamy, że dane zdanie będzie się składać z co najmniej jednego i co najwyżej ośmiu słów, a każde słowo z co najmniej jednej i co najwyżej 12 liter z alfabetu od a do p.

Poniższy rysunek przedstawia wynik wywołania FLAGI [ola ma domek].

Zadanie 3. Waga szalkowa

Jeśli mamy po jednym odważniku o masie 1 kg, 3 kg, 9 kg itd. aż do 3n kg, to możemy na wadze szalkowej odważyć każdy ciężar, którego masa w kg jest liczbą całkowitą z zakresu od 0 do 1+3+...+3n i to w dodatku tylko w jeden sposób.
Na przykład, żeby zrównoważyć ciężar 11 kg, trzeba na jednej szali położyć dany ciężar i odważnik 1 kg., a na drugiej szali - odważniki 9 kg i 3 kg.

Zdefiniuj funkcję ZRW :mc, która dla danej masy ciężaru, będącej liczbą całkowitą dodatnią, wyznacza odważniki, które trzeba położyć na szalach wagi, żeby zrównoważyć dany ciężar.
Wynikiem funkcji ma być dwuelementowa lista. Pierwszym jej elementem powinna być lista mas odważników, które należy położyć na jednej szali z odmierzanym ciężarem, a drugim elementem - lista mas odważników, które należy położyć na przeciwnej szali. Obie te listy powinny być uporządkowane malejąco.

Oto przykładowe wyniki:

ZRW 101 powinno dać wynik [[9 1][81 27 3]],
ZRW 282 powinno dać wynik [[][243 27 9 3]],
ZRW 3295 powinno dać wynik [[2187 729 243 81 27][6561 1]],
ZRW 243 powinno dać wynik [[][243]].