Zad. 1 (19 XI 2003) (za 4 punkty) Automat komórkowy jest symulowanym światem wypełnionym komórkami zmieniającymi swój stan w zależności od bodźców zewnętrznych, np. stanu swoich sąsiadów. Przykładem automatu komórkowego jest tzw. "Gra w Zycie" Conwaya. My zajmiemy się symulacją automatu komórkowego w jednowymiarowym, cyklicznym świecie o ustalonym rozmiarze. Każda komórka może być w jednym z dwóch stanów: żywym lub martwym. Symulacja polega na ustaleniu, na podstawie aktualnego stanu świata, nowego stanu wszystkich komórek. Powiemy, że jeden krok symulacji oblicza nową generację w oparciu o poprzednią. Reguła określająca nowy stan komórki będzie uwzględniała jej dotychczasowy stan, oraz stan jej bezpośrednich sąsiadów. Oto kilka przykładowych reguł: (a) w następnej generacji żywe komórki giną a martwe stają się żywe (b) świat przesuwa się "w prawo", tj. komórka osiąga stan, jaki poprzednio miał jej lewy sąsiad (c) świat przesuwa się "w lewo", tj. komórka osiąga stan, jaki poprzednio miał jej prawy sąsiad (d) żyją komórki, które w poprzedniej generacji miały dokładnie jednego żywego sąsiada, pozostałe stają się martwe Do zapisu reguły rządzącej symulowanym światem potrzebne jest 8 bitów informacji. Będziemy ją reprezentowali jako liczbę całkowitą z przedziału 0..255. Kolejne cyfry w zapisie binarnym tej liczby określą, na podstawie stanu trzech sąsiadujących komórek, nowy stan środkowej z nich. Oto reprezentacja przedstawionych powyżej reguł ("1" oznacza komórkę żywą a "0" martwą): 111 110 101 100 011 010 001 000 reprezentacja liczbowa (a) 0 0 1 1 0 0 1 1 51 (b) 1 1 1 1 0 0 0 0 240 (c) 1 0 1 0 1 0 1 0 170 (d) 0 1 0 1 1 0 1 0 90 Napisz program, który przeprowadzi symulację automatu komórkowego opisanego powyżej. Program powinien pobrać dwa parametry. Pierwszy z nich ma być liczbą 0..255 reprezentującą regułę obliczania nowej generacji, a drugi to liczba (>0) kroków symulacji, które należy wykonać. Program wczyta z wejścia stan początkowy świata zapisany jako ciąg znaków 'X' (komórka żywa) oraz ' ' (komórka martwa) i zasymuluje działanie automatu komórkowego wypisując na wyjście stan świata p= o obliczeniu każdej nowej generacji. Oto przykład działania programu (rozmiar świata równy 50): dla stanu początkowego: XX X XXXX X X X X X X XXXXX X X X X X XX program wywołany z parametrami 90 10 powinien wypisać: X X XX XXX XX X X X X XX XX XXX X XX XXXXX XX XXXX X X X XX XX X XXX XX X XX X XXXXX X XX X XX X XX XX X X XX X X XX X XX XXXXX X X XXX XXX X XXX X X X XXX XXXXXXX XXX X XX X X X X XX X X X X XXXX XX XX XX X XXXX XX XXXX XX X XX X X XX XXX XX XX X XX XXX X XXXXX X XXX XX XXXXX XX X XX XXX X XXXXX XX X XXX X X X X XX X X XX XX X X X XXXXX XXX XX X X XX X X XXX XXX X X X XX XXXX X XX X Uwaga 1: Program powinien badać poprawność swoich parametrów. Uwaga 2: Rozmiar świata należy określić przy pomocy stałej symbolicznej, by łatwo można było go zmienić. Uwaga 3: Regułę określającą zachowanie automatu wygodnie jest reprezentować podczas symulacji jako tablicę trójwymiarową. Uwaga 4: Do odczytywania parametrów programu użyj funkcji "paramCount" i "paramStr" oraz procedury "val" (opis na zajęciach).