Feladat: I.382 Korcsoport: - Nehézségi fok: -
Füzet: 2015/október, 419 - 420. 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 ZUMA egy többféle elrendezésű pályán játszott lövöldözős játék. A játék során a pályán mozgó, kezdetben folytonos sort alkotó, különböző színű golyókat kell lövések segítségével eltüntetni, mielőtt azok bármelyike elérné a pálya végét. Készítsünk programot, amelyben a játékot egy egyenes szakaszon játsszuk, a golyók balról jobbra mozognak és minden időegységben egy lövés történik.
Szabályok:

a golyók kezdetben a pálya bal oldalán helyezkednek el, közöttük golyó nélküli pozíció nincs;
balról az első golyó minden időegységben egy egységgel tolódik jobbra;
minden olyan golyó tolódik, amelynek a szomszédja tolódik;
a kilőtt golyó tolódás után ér célba, de még ugyanabban az időegységben
ha a találat helyén golyó van, akkor
*ha a találat helyén és közvetlenül mellette azonos színű golyók voltak egymás mellett;
azokat eltünteti, helyük üres lesz;
amíg az üressé váló rész két oldalán együttvéve 3 vagy több azonos színű golyó van, azok is eltűnnek;

*különben a kilőtt golyó a találat helyére kerül, az ott lévő golyó pedig jobbra tolódik és a jobbra lévő golyók közül mindazok tolódnak, amelyek szomszédja tolódik;

ha a találat helyén nincs golyó, akkor
*ha valamely szomszédjában van golyó, a golyó a célhelyen marad;
*különben a golyó eltűnik.

A bemeneti fájl első sora a pálya h hosszát, a pályán lévő golyók p számát és a játék során kilőtt golyók k számát tartalmazza. A második sor p darab karaktert tartalmaz, amely a golyók színét jelöli, amelyek sorrendben a pálya bal szélétől helyezkednek el. (A golyók színét az A, ..., F karakterek jelölik.) A következő k sor egy-egy golyó-hely párt tartalmaz: a páros első tagja a golyó színét jelöli, a második tagja pedig a pozíciót, amelyen a golyó a pályát eléri. A kimenet a rendszer állapotát mutatja az utolsó lövést követően.
Ha az összes golyót sikerült lövésekkel eltüntetni, akkor az első sorba 0 kerüljön, a második sorba azon lövés sorszáma, amely után ez először teljesült.
Ha valamely golyó elérte a pálya végét, akkor az első sorba a -1 kerüljön, a második sorba pedig azon lövés sorszáma, amely után ez történt.
Ha van még golyó a pályán, de egy sem érte el a végét, akkor az első sor az 1 értéket tartalmazza, a második sor pedig h darab karaktert, amely a pályán lévő golyók színét jelöli balról jobbra. Az üres pozíciókra . kerüljön.

Az alábbi példa sorai egy-egy, egymástól független állapotokban bekövetkezett lövést és annak eredményét mutatják.
 
Aktuális állapot  LövésKövetkező állapot  BAAB......A 2.ABAAB....   BAAB......A 3.B..B.....   BBAAB.....A 4..........   BBAABCCC..A 5......CCC.   CBBAABCCC.A 5..........   AA...AA...B 4.AAB..AA..   AA...AA...B 5.AA...AA..   
 

Bemenet  Kimenet  20 10 3   1ABCDEABCDE   ...ABACBDEABCDE.....   A 4   B 7   A 1   
 

A program első parancssori argumentuma a bemeneti fájl neve, a második pedig a kimeneti fájl neve legyen.
Beküldendő egy tömörített i382.zip állományban a program forráskódja, valamint a program rövid dokumentációja, 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ó.