Zadanie 6 (termin oddania: 19 stycznia 2006, godz. 23:59) Stworzona przez Johna Conwaya gra w Zycie (ang. Life) polega na symulacji znajdujacego sie na plaszczyznie swiata komorek, z ktorych kazda moze byc w jednym z dwoch stanow: "zywa" lub "martwa". Laczny stan wszystkich komorek tego swiata nazywamy generacja. Kazda komorka ma osmiu sasiadow (gora, gora-prawo, prawo, prawo-dol, dol, dol-lewo, lewo, lewo-gora). Gra rozpoczyna sie od pewnej generacji, na podstawie ktorej obliczamy nowa kierujac sie nastepujacymi regulami: - zywa komorka, ktora w tej generacji ma mniej niz dwoch lub wiecej niz trzech zywych sasiadow, w nastepnej generacji bedzie martwa, - martwa komorka, ktora w tej generacji ma trzech zywych sasiadow, w nastepnej generacji bedzie zywa, - jesli nie jest spelniony zaden z powyzszych warunkow, komorka w nastepnej generacji bedzie w takim samym stanie, jak w obecnej. Stan planszy bedziemy reprezentowali w postaci pliku wartosci logicznych (file of boolean), w ktorym false oznacza, ze komorka jest martwa a true, ze jest zywa. W pliku tym zapiszemy, wiersz po wierszu, stan komorek z kwadratowego wycinka plaszczyzny obejmujacego wszystkie zywe komorki. Dlugosc pliku reprezentujacego stan planszy bedzie wiec zawsze kwadratem liczby calkowitej. Jesli poprzednia generacja miescila sie w kwadracie o boku K, to nastepna bedzie sie miescila w kwadracie o boku K+2 (bo np. moze sie pojawic nowa zywa komorka nad komorka, ktora do tej pory byla najwyzej). Program powinien rozpoznawac cztery sposoby uruchomienia. W kazdym przypadku program otrzymuje trzy parametry, z ktorych drugi i trzeci sa nazwami plikow. Pierwszy parametr bedzie litera wskazujaca, jaka operacje uzytkownik chce wykonac: ./zad6 c dane.txt plansza.dat ("czytaj) W pliku tekstowym dane.txt jest opis stanu poczatkowego planszy. Znajduje sie tam K wierszy (wartosci K nie znamy), z ktorych kazdy ma K znakow: spacje oznaczajace, ze komorka jest martwa i gwiazdki oznaczajace, ze komorka jest zywa. Program ma stworzyc plik binarny o nazwie plansza.dat i umiescic w nim K*K wartosci logicznych reprezentujacych stan planszy. ./zad6 p plansza.dat wynik.txt ("pisz") W pliku K*K wartosci logicznych plansza.dat znajduje sie reprezentacja planszy. Program ma stworzyc plik tekstowy wynik.txt i zapisac w nim, w K wierszach kazdy po K znakow, tekstowa reprezentacje stanu planszy przy pomocy odstepow i gwiazdek. ./zad6 g dane.dat wynik.dat ("generuj") W pliku K*K wartosci logicznych dane.dat znajduje sie stan planszy. Program ma utworzyc plik wartosci logicznych wynik.dat i zapisac w nim (K+2)*(K+2) wartosci logicznych reprezentujacych stan planszy po wykonaniu jednego kroku symulacji. ./zad6 z dane.dat wynik.dat ("zmniejsz") W pliku K*K wartosci logicznych dane.dat znajduje sie stan planszy. Program ma znalezc najmniejsza liczbe calkowita L taka, ze wszystkie zywe komorki planszy z pliku dane.dat mieszcza sie w kwadracie o boku L. Nastepnie program tworzy plik wynik.dat zawierajacy L*L wartosci logicznych reprezentujacych plansze o tej samej zawartosci, co w pliku dane.dat. Pierwszy wiersz i pierwsza kolumna wygenerowanej planszy maja byc niepuste - oczywiscie poza przypadkiem, gdy wynikowa plansza jest pusta. UWAGA - dotyczy to takze sytuacji, gdy nie bylo mozna zmniejszyc rozmiaru planszy.