Feladat: I.337 Korcsoport: - Nehézségi fok: -
Füzet: 2014/január, 37 - 38. oldal  PDF  |  MathML 

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 jenga népszerű szórakoztató társasjáték, amelyet ‐ kevésbé élvezetes formában ‐ akár online is játszhatunk. A játékszabály elérhetősége

http://tarsasoznijo.blog.hu/2009/04/14/jenga,
az online játék elérhetősége
http://hu.freeonlinegames.com/game/jenga.
Míg a valóságban nagy szerep jut az ügyességnek, a számítógépes változat inkább logikai játéknak tekinthető.
A klasszikus jenga játékkal szemben mi kezdésként n emeletből álló tornyot építünk. Az egyes emeletek felülnézetben felváltva mutatják az alábbi (A/B) szerkezetet:
 
 

A ledőlés vizsgálatához gondolatban minden jenga elemet bontsunk fel három négyzet alapú hasábra, ezek súlya legyen egységnyi. (Ilyen formában az emeletek közötti szerkezeti különbség eltűnne.) A torony egy hiányos emelet felett dőlhet le. A ledőléshez szükséges állapotot a feladatban úgy definiáljuk, hogy a hiányzó és meglévő elemek találkozásánál lévő ,,alátámasztási'' él hiányos oldalán nagyobb forgatónyomaték lép föl, mint a másikon. A ledőlés vizsgálatát szemlélteti a mellékelt oldalnézeti ábra.
 
 

Az alsó szint hiányos, az alátámasztási élt ebben a képben a kis kör jelöli. Úgy tekintjük, hogy az egyes elemek tömege a tömegközéppontjukban van. Itt a hiányos oldalon 3 egység a forgatónyomaték (a nehézségi erő 6, az erőkar 0,5 egység), a másik oldalon 7,5 egység a forgatás mértéke (a középső oszlop felett a nehézségi erő 6, az erőkar 0,5 egység, a jobb oldali oszlop felett a nehézségi erő 3, az erőkar 1,5 egység), tehát itt nem dől le a torony. (A számításnál feltettük, hogy a középső szintről egy jenga elem sem hiányzik.)
Írjunk programot, amely a hasábok mozgatás-sorozatát vizsgálva megállapítja, hogy melyik lépés eredményeként dől le a torony. A bemenet első sorában az emeletek száma található. Alatta soronként három adat szerepel egy-egy lépés leírásaként. Az első szám megadja, hogy melyik emeletről veszik el az elemet, a második az adott elem helyét írja le (1/2/3), a harmadik pedig az elhelyezés pozícióját (1/2/3) adja meg. A kimenet megadja a lépés sorszámát és a ledőlés okát: ,,az eltávolítás miatt'', ,,az elhelyezés miatt''.
 
BemenetKimenet  15   6   1 1 2   az eltávolítás miatt3 1 3   5 1 1   4 3 2   2 1 1   5 2 3   7 2 3   8 2 2   5 3 1   
 

A program első parancssori argumentuma a bemeneti fájl, a második pedig a kimeneti fájl neve legyen.
Beküldendő egy tömörített i337.zip állományban a program forráskódja (i337.pas, i337.cpp, ...), valamint a program rövid dokumentációja (i337.txt, i337.pdf, ...), amely tartalmazza a megoldás rövid leírását, és megadja, hogy a forrásállomány melyik fejlesztői környezetben fordítható.