Zadanie 6 (termin oddania: 19 stycznia 2006, godz. 23:59) Stworzona przez Johna Conwaya gra w Życie (ang. Life) polega na symulacji znajdującego się na płaszczyźnie świata komórek, z których każda może być w jednym z dwóch stanów: "żywa" lub "martwa". Łączny stan wszystkich komórek tego świata nazywamy generacją. Każda komórka ma ośmiu sąsiadów (góra, góra-prawo, prawo, prawo-dół, dół, dół-lewo, lewo, lewo-góra). Gra rozpoczyna się od pewnej generacji, na podstawie której obliczamy nową kierując się nastepującymi regułami: - żywa komórka, która w tej generacji ma mniej niż dwóch lub więcej niż trzech żywych sasiadów, w następnej generacji będzie martwa, - martwa komórka, która w tej generacji ma trzech żywych sąsiadów, w następnej generacji będzie żywa, - jeśli nie jest spełniony żaden z powyższych warunków, komórka w następnej generacji będzie w takim samym stanie, jak w obecnej. Stan planszy będziemy reprezentowali w postaci pliku wartości logicznych (file of boolean), w którym false oznacza, że komórka jest martwa a true, że jest żywa. W pliku tym zapiszemy, wiersz po wierszu, stan komórek z kwadratowego wycinka płaszczyzny obejmującego wszystkie żywe komórki. Długość pliku reprezentującego stan planszy będzie wiec zawsze kwadratem liczby całkowitej. Jeśli poprzednia generacja mieścila się w kwadracie o boku K, to następna będzie się mieścila w kwadracie o boku K+2 (bo np. może się pojawić nowa żywa komórka nad komórka, która do tej pory była najwyżej). Program powinien rozpoznawać cztery sposoby uruchomienia. W każdym przypadku program otrzymuje trzy parametry, z których drugi i trzeci są nazwami plików. Pierwszy parametr będzie literą wskazującą, jaką operację użytkownik chce wykonać: ./zad6 c dane.txt plansza.dat ("czytaj) W pliku tekstowym dane.txt jest opis stanu początkowego planszy. Znajduje się tam K wierszy (wartości K nie znamy), z których każdy ma K znaków: spacje oznaczające, że komórka jest martwa i gwiazdki oznaczające, że komórka jest żywa. Program ma stworzyć plik binarny o nazwie plansza.dat i umieścić w nim K*K wartości logicznych reprezentujących stan planszy. ./zad6 p plansza.dat wynik.txt ("pisz") W pliku K*K wartości logicznych plansza.dat znajduje się reprezentacja planszy. Program ma stworzyć plik tekstowy wynik.txt i zapisać w nim, w K wierszach każdy po K znaków, tekstową reprezentację stanu planszy przy pomocy odstępów i gwiazdek. ./zad6 g dane.dat wynik.dat ("generuj") W pliku K*K wartości logicznych dane.dat znajduje się stan planszy. Program ma utworzyć plik wartości logicznych wynik.dat i zapisać w nim (K+2)*(K+2) wartości logicznych reprezentujących stan planszy po wykonaniu jednego kroku symulacji. ./zad6 z dane.dat wynik.dat ("zmniejsz") W pliku K*K wartości logicznych dane.dat znajduje się stan planszy. Program ma znaleźć najmniejszą liczbę całkowitą L taką, że wszystkie żywe komórki planszy z pliku dane.dat mieszcza się w kwadracie o boku L. Następnie program tworzy plik wynik.dat zawierający L*L wartości logicznych reprezentujących planszę o tej samej zawartości, co w pliku dane.dat. Pierwszy wiersz i pierwsza kolumna wygenerowanej planszy mają być niepuste - oczywiście poza przypadkiem, gdy wynikowa plansza jest pusta. UWAGA - dotyczy to także sytuacji, gdy nie było można zmniejszyć rozmiaru planszy.