Feladat: I.164 Korcsoport: - Nehézségi fok: -
Füzet: 2007/szeptember, 359. oldal  PDF  |  MathML 
Témakör(ök): Feladat

A szöveg csak Firefox böngészőben jelenik meg helyesen. Használja a fenti PDF file-ra mutató link-et a letöltésre.

A sejtautomata játék egy változatában a világot egy 27×27-es méretű négyzetrácsnak tekintjük, melynek mezőin sejtek élnek, egy mezőn legfeljebb kettő. A négyzetrács szélén lévő cellák érdekessége, hogy nekik is négy élszomszédjuk van: a felső sorban lévő cellák szomszédosak az alsó sor megfelelő celláival és viszont, hasonlóan a bal oldali oszlop cellái a jobb oldali oszlop celláival.
Szabályos időközönként új generációk jönnek létre. Minden sejt négyfelé osztódik, s ő maga elpusztul (egy-egy utód kerül a négy szomszédos cellák mindegyikébe). Ha egy cellába több utód is kerül, akkor azok hármasával elpusztítják egymást, amíg legfeljebb 1 vagy 2 marad.
Írjunk programot, amely a sejtek jelenlegi elhelyezkedése alapján meghatározza, hogy hogyan fog kinézni a világ N generáció múlva.
A program a szükséges adatokat a standard bemenetről olvassa. A bemenet első sora a generációk N (0N1000000000) számát tartalmazza, az ezt követő 27 sor pedig rendre 27 számjegyet, a megfelelő cellákban élő sejtek számát (0, 1 vagy 2). Az eredményt a standard kimenetre írjuk, a bemenettel megegyező formátumban.
Ügyeljünk rá, hogy a program nagy N-ekre is gyorsan lefusson. Keressünk szabályosságot.
Helyszűke miatt itt egy kisebb (de minden más szempontból azonosan működő) példát közlünk:

 
 

Egy teljes 27×27-es példa letölthető az Internetről.
Beküldendő a program forráskódja (i164.pas, i164.cpp, ...), valamint a program rövid dokumentációja (i164.txt, i164.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztő környezetben fordítható.