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.