Logia04 – rok szkolny 2003/2004 – etap - III

Zad. 1. Zdefiniuj procedurę GWIAZDY :kod rysującą gwiazdozbiór składający się z gwiazd.

Każda gwiazda składa się z pęku ramion-odcinków o tej samej długości, równomiernie rozmieszczonych wokół środka gwiazdy.

Każda gwiazda może posiadać własne gwiazdy-satelity - są one rysowane na przedłużeniu każdego ramienia gwiazdy-matki. Długość ramienia gwiazdy-satelity równa jest jednej trzeciej długości ramienia gwiazdy-matki. Odległości środków gwiazdy-matki i gwiazdy-satelity są równe podwójnej długości ramienia gwiazdy-matki.

Gwiazdy-satelity mogą posiadać swoje własne gwiazdy-satelity, itd.

Centralna gwiazda układu jest rysowana na środku ekranu. Jej ramiona mają losową długość, nie mniejszą niż 20 i nie większą niż 80.

Dana :kod może być liczbą lub listą:

Gwiazdy należy rysować w losowych kolorach, ale wszystkie ramiona danej gwiazdy muszą być rysowane tym samym kolorem. Zakładamy, że dana :kod określa rysunek, w którym poszczególne gwiazdy nie nachodzą na siebie.

Przykład pokazuje rysunek jaki może powstać po wywołaniu Gwiazdy [12 6 6 [77 5 5 5 5 [3 3 3 3 3] 4 4 4] 24]

Zad. 2. Zdefiniuj procedurę DOM :a :h :kod rysującą dom składający się z parteru, pięter i dachu. Każda kondygnacja domu jest szarym prostokątem, o tej samej wysokości, zawierającym okna i drzwi (drzwi - tylko parter). Dach stanowią kominy.

Dana :a określa szerokość domu, :h - wysokość (bez dachu). Dana :kod jest listą słów złożonych z małych liter alfabetu łacińskiego (bez polskich znaków diakrytycznych). Pierwszy element listy opisuje parter, ostatni - dach, inne ? piętra, w kolejności od dołu ku górze. Każde słowo opisuje wygląd jednej kondygnacji. Poszczególne litery mają następujące znaczenie:

  1. Parter:
    • spółgłoski g, j, p, q określają "drzwi zamknięte" - brązowy prostokąt,
    • pozostałe spółgłoski to "okna zamknięte" - brązowe kwadraty,
    • samogłoska y określa "drzwi otwarte" - żółty prostokąt,
    • pozostałe samogłoski to "okna otwarte" - żółte kwadraty.
  2. Piętro:
    • wszystkie spółgłoski - "okna zamknięte",
    • wszystkie samogłoski - "okna otwarte".
  3. Dach:
    • litery b, d, f, h, k, l, t - "kominy wysokie" - czarne prostokąty,
    • pozostałe litery - "kominy niskie" - czarne kwadraty.

Bok kwadratu (okna, niskiego komina) powinien być maksymalnie duży, ale nie większy niż jedna trzecia wysokości kondygnacji. Okna, drzwi i kominy nie mogą nachodzić na siebie. Prostokąty reprezentujące drzwi i kominy wysokie mają być dwa razy wyższe od kwadratów. Poszczególne elementy powinny być równomiernie rozmieszczone w obrębie kondygnacji, drzwi dotykają do dołu parteru, a kominy wyrastają ponad najwyższym piętrem (patrz rysunek).

Zakładamy, że :kod zawiera co najmniej dwa słowa, a więc dom składa się co najmniej z parteru i dachu.

Poniżej podany jest przykładowy rysunek, jaki może powstać dla wywołania

  • Dom 90 86 [jan lubi lot].

    Zad. 3. Zdefiniuj funkcję PUNKTY :lp, której daną jest lista punktów, a wynikiem wartość logiczna prawda lub fałsz. Każdy punkt to dwuelementowa lista złożona z jego x-owej i y-owej współrzędnej. Wynikiem funkcji jest:

    • prawda, gdy na liście znajdują się co najmniej dwa punkty leżące na tej samej prostej równoległej do jednej z krawędzi ekranu (pionowej lub poziomej),
    • fałsz, w przeciwnym przypadku.

    Oto przykładowe wyniki:

    • Wynikiem PUNKTY [[22 33] [33 22] [66 77]] - jest fałsz.
    • Wynikiem PUNKTY [[11 22] [33 44] [11 55]] - jest prawda.

    Zad. 4. Zdefiniuj funkcję SUMACYFR :lp. Dana :lp jest dowolną listą. Wynikiem funkcji jest suma wartości wszystkich cyfr jakie można odczytać w zapisie listy :lp.

    • Wynikiem SUMACYFR [Ala ma 5 kotów i 12 psów] - jest 8 (bo 5+1+2=8).
    • Wynikiem SUMACYFR [1 [a 5b5 c -23 d8 6e] [[x5]] abc2def] - jest 37 (bo 1+5+5+2+3+8+6+5+2=37).