Az I. 358. feladat (2014. november) |
I. 358. Az aknakereső játék célja az \(\displaystyle N\times N\) (\(\displaystyle 2\le N\le 50\)) négyzet alakú mezőn lévő \(\displaystyle K\) (\(\displaystyle 0\le K\le N\times N/2\)) akna megtalálása, illetve azok elkerülése. A cellák tartalma eredetileg el van rejtve, de ha kiválasztjuk, akkor megismerjük a tartalmát. Ha a cellában akna volt, akkor vége van a játéknak, különben egy 0 és 8 közötti szám jelenik meg. A szám azt adja meg, hogy hány akna van a választott cella nyolc szomszédjában összesen.
Ha a felfedett cella szomszédságában nincs akna, akkor az összes szomszédja is felfedetté válik, és ez rekurzívan folytatódik a szomszédok szomszédjaival is. Győzelemmel akkor fejeződik be a játék, ha felfedtünk minden olyan mezőt, amely alatt nincs akna.
A következő példában egy játék egy lépését láthatjuk:
Készítsünk programot i358 néven, amely az aknamezőt előállítja és a felhasználóval a játékot levezeti.
1. Olvassuk be \(\displaystyle N\) és \(\displaystyle K\) értékét, és azok felhasználásával oldjuk meg a következő feladatokat.
2. Állítsuk elő a játék pályáját, amelyen véletlenszerű cellákban \(\displaystyle K\) darab akna legyen. ,,*'' jelöli az aknát és ,,.'' az üres cellát.
3. Programunk kipróbálása, tesztelése miatt állítsuk be, hogy Teszt és Játék üzemmódból választani lehessen. A Teszt üzemmódban az aknák látszódjanak, míg a Játék-ban maradjanak rejtve.
4. Olvassuk be a pálya egy sor és oszlop koordinátáját és a cella tartalma alapján jelenítsük meg a választ.
\(\displaystyle a)\) Ha a cellában akna volt, akkor írjuk ki, Bumm! és a program álljon le.
\(\displaystyle b)\) Amennyiben a cellában nem volt akna, akkor jelenítsük meg a pályán a szabályok szerinti eddigi információkat a felfedett és a még nem ismert cellákkal.
5. Folytassuk a tippek beolvasását addig, amíg az összes üres cella szomszédjainak számát a felhasználó meg nem határozza a játékkal. Ha ez sikerül, akkor abban az esetben írjuk ki, hogy Nyertél!
6. Minden tippelés előtt jelenítsük meg, hogy még hány fel nem derített üres cella van a pályán és hányadik tippelés következik éppen.
Beküldendő egy tömörített i358.zip állományban a program forráskódja (i358.pas, i358.cpp, ...) és rövid dokumentációja (i358.txt, i358.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ó.
(10 pont)
A beküldési határidő 2014. december 10-én LEJÁRT.
Minta megoldás:
Dombai Tamás 12. osztályos tanuló (Garay János Gimnázium, Szekszárd) megoldása: i358.cs
Leírása: I358.pdf
Statisztika:
19 dolgozat érkezett. 10 pontot kapott: Bálint Martin, Bognár 2012 Balázs, Dombai Tamás, Fehér Balázs, Fényes Balázs, Kazal Soma, Kiss 107 Ádám, Kovács 246 Benedek, Mócsy Miklós, Nagy Ábel, Németh 729 Gábor, Olexó Gergely, Radnai Bálint, Rittgasszer Ákos. 9 pontot kapott: Uzonyi 000 Ákos. 8 pontot kapott: 1 versenyző. 6 pontot kapott: 1 versenyző. 5 pontot kapott: 2 versenyző.
A KöMaL 2014. novemberi informatika feladatai