I. 164. Feladat
Nagy Zoltn
Kaposvr, Munkcsy Mihly Gimnzium s Szakkzpiskola, 11.a

Fordt: gcc -std=c99
A -sdt=c99 opci azrt szksges, mert a "for" ciklusok futvltozinak a ciklus elejn trtn deklarcija a korbbi szabvnyokban mg nem szerepelt. 

A program mkdse
------------------
A mellkelt i164_test.c programmal megmutathat, hogy 27x27-es vilg esetn a kiindulsi llapot megismtldik minden 27. genercinl. gy a sok szzezer lps helyett legfeljebb 26 lpst kell kiszmolnia a feladatot megold programnak.

A program az adatok beolvassval kezddik. A "turns" vltozba kerl a genercik krt szma. A fenti szablyszersg miatt 'n' krt genercira elg az n-((n/27 egszrsze)*27) sorszm genercit kiszmolni.

A kiindulsi helyzet a "field" tmbbe kerl, a vilg egy-egy mezje a tmb egy elemeknt.

A tnyleges szmolst a "step" fggvny hajtja vgre. A "field" tmb minden elemnek 'osztds utni' rtkt megadja a "temp" tmbbe (a "temp" tmbre azrt van szksg, mert klnben a kvetkez generci mr kiszmolt mezi hatssal lennnek a mg htralev mezk rtkre). Ezutn a "temp" tmb rtkeit visszarja a "field"-be. Mivel a C-ben a tmbk elemeinek szmozsa 0-tl kezddik, a vilg indexei 0-tl a (SIZE konstansban megadott rtk - 1)-ig terjednek. Egy-egy mez rtknek kiszmolsa a kvetkezkppen trtnik:

Ha a tle jobbra lev mez x indexe kvl esik a vilgon, akkor veszi a sor els elemnek rtkt, klnben a tle jobbra lev mez rtkt
Ha a felette lev mez y indexe 0-nl kisebb, akkor veszi az oszlop utols elemnek rtkt, egybknt a felette lev mez rtkt
Ha a tle balra lev mez x indexe 0-nl kisebb, akkor veszi a sor utols elemnek rtkt, egybknt a tle balra lev mez rtkt
Ha az alatta lev mez y indexe kvl esik a vilgon, akkor veszi az oszlop els elemnek rtkt, egybknt az alatta lev mez rtkt
Ezeket sszeadja, majd addig az sszegbl von le hrmat, amg az 0, 1 vagy 2 nem lesz.

A program kiszmolja a krt genercit, majd vgl kirja azt a standard kimenetre.


Megjegyzsek
------------
Kivteles esetek, mikor az egsz vilg csak 0, 1 vagy 2 rtk mezket tartalmaz. 0-nl termszetesen mindig minden mez 0 lesz, 1-nl minden mez 1 (4*1 - 3), 2-nl minden mez 2 (4*2 - 3 - 3). Ezeket a kivteles eseteket is be lehetne iktatni a programba, de ezek annyira valszntlen esetek (1 : 3 a 729-en), hogy a gyakorlatban nem ri meg.

rdekes egybknt, hogy a vilg mretnek vltoztatsval hogyan vltozik a kiindulsi helyzet ismtldsnek intervalluma. 1x1,2x2,3x3 mret vilgra pldul 1, 2, illetve 3 lpsenknt tr vissza az alapllapot. A 2x2 mret vilgon kvl pros szmoknl egyltaln nem ismtldik a kiindulsi helyzet. 9-re pldul rdekes mdon a 9., 11-re a 121., 17-re az 1640. genercinl tr vissza a kiindulsi helyzet.