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.