Feladat: I.513 Korcsoport: 16-17 Nehézségi fok: átlagos
Füzet: 2020/május, 294 - 295. oldal  PDF  |  MathML 
Témakör(ök): Számítástechnika, informatika, Feladat, Programozás, algoritmusok

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 elnevezés Neumann Jánostól származik az 1940-es évek elejéről, aki az önmagát reprodukáló gép logikáját, létrehozásának lehetőségeit vizsgálta. A leghíresebb sejtautomata a John Horton Conway által kitalált életjáték. Conway egy hónappal ezelőtt, 2020 áprilisában halt meg, így ezzel a feladattal rá is emlékezünk.
A Conway-féle életjátékban sejtek élnek egy kétdimenziós világban. A sejtek egy képzeletbeli táblázat egy-egy cellájában találhatók. Viselkedésüket az határozza meg, hogy az őket tartalmazó cella 8 szomszédja közül hányban található sejt. Ha egy sejt szomszédos cellái közül kettőnél kevesebb vagy háromnál több tartalmaz sejtet, akkor a sejt elpusztul, egyébként életben marad. Ha egy cella üres, de a szomszédos cellák közül pontosan háromban van sejt, akkor az üres cellában új sejt születik. A leírt változások nem folyamatosan, hanem lépésekben (generációkban) történnek. Kezdetben az élettér bizonyos celláiban vannak sejtek, míg a többi cellában nincsenek.
Például egy 6×6-os élettér hat egymást követő állapota (a szürke cellákban vannak sejtek, a sötétebbek új sejtek helyét mutatják):

 
 

Készítsünk programot sejtautomata néven egy 50×50-es négyzethálós életjátékhoz és oldjuk meg a következő feladatokat. A megoldások során a mintához hasonlóan valósítsuk meg a felhasználóval történő kommunikációt (az ékezetmentes kiírás is elfogadott).
1.Olvassuk be az élettér kezdeti állapotát a conway.txt szöveges állományból és tároljuk el az adatokat úgy, hogy a szimulációhoz használni tudjuk őket. A szöveges állomány 50 sorból áll, melyek mindegyikében 50 karakter található. Az állomány i-edik sorának k-adik karaktere az élettér i-edik sorának k-adik oszlopában lévő cella kezdeti tartalmát mutatja: szóköz esetén a cella üres, s betű esetén a cellában sejt van.
2.Adjuk meg, hogy összesen hány sejt található az élettérben. Készítsünk függvényt szomszed néven, amelynek bemeneti paramétere i és k, amelyek az élettér i-edik sorát és k-adik oszlopát jelentik. A függvény számítsa ki és adja vissza a megfelelő cella szomszédjaiban található sejtek számát.
3.Kérjük be a felhasználótól egy oszlop és egy sor értékét, és adjuk meg, hogy az adott cellában van-e sejt, illetve azt, hogy a cella szomszédjaiban hány sejt található.
4.Készítsünk eljárást egylepes néven, amely elvégez egy szimulációs lépést. Vegyünk fel az eredeti élettér mellé még egy átmeneti tárolót, amely az élettér állapotát mutatja majd a következő generációban. Vizsgáljuk meg az élettér celláit a fenti leírásnak megfelelően, majd ez alapján adjunk értéket a most létrehozott átmeneti tárolónak. Az eljárás végén a kiszámított új élettér értékei kerüljenek a tárolóból az eredeti élettérbe.
5.Számítsuk ki, hogy hány olyan sejt van az élettérben, amely életben marad egy szimulációs lépés megtétele után, majd az eredményt jelenítsük meg.
6.Végezzük el a szimuláció n lépését az egylepes alprogram meghívásával, ahol n értékét a felhasználótól kérjük be.
7.Adjuk meg, hogy az eddig elvégzett n lépés után most hány sejt fog születni a következő szimulációs lépésben.
8.Adjunk statisztikát a szimuláció következő 100 lépésében az élettér állapotáról. Írjuk a statisztika.txt szöveges állomány egy-egy sorába az élettérben lévő sejtek, a következő szimulációs lépésben elpusztuló és születő sejtek számát egy-egy szóközzel elválasztva. Ha az élettér üres, tehát a sejtek kihalnak, akkor az állományba 0 0 0 tartalmú sorokat ne írjunk, hanem helyette a következő sor jelenjen meg: ,,A szimuláció 34. lépése után az élettér már nem tartalmaz sejteket.'' A szimulációs lépések közé a 6. feladatban végrehajtott n lépés is beleszámít.

Példa a be/kimenetre:

2. feladat:Az élettérben található sejtek száma: 1423. feladat:A vizsgált cella oszlopa: 4   A vizsgált cella sora: 5   A cellában nincs sejt, a szomszédos cellákban a sejtek száma 1.5. feladat:   Az élettérben 25 olyan sejt van, amely a következő időpontban is életben marad.6. feladat:   Hány lépést végezzünk el a szimulációból: 107. feladat:   Az élettérben 12 sejt fog születni a következő szimulációs lépésben.