Tornászbajnokság (100 pont)
Tornászbajnokságot tartanak. A csarnokhoz csatlakozóan van egy hosszú, szűk folyosó, melynek közepénél szembe találkozik a svéd és a magyar tornász válogatott négy-négy tagja. Egymás mellett nem férnek el, kénytelenek valami más megoldást kitalálni. Arra jutottak, hogy átugrálnak egymás feje felett, de magyar csak svédet, svéd csak magyart ugorhat át. Bárki átléphet egy szomszédos üres mezőre.
A játék egy 9 egymás melletti mezőből álló táblán játszódik, H-val jelöltük a magyar csapat tagjait, akik a bal oldali 4 mezőt foglalják el. S-el jelöljük a svédeket, akik jobbról helyezkednek el:
HHHH_SSSS
A megengedett mozgások:
- Bármely tornász átléphet az üres helyre, ha az közvetlenül mellette van (bármely irányba).
- H átugorhatja S-t, ha S túloldalán üres hely van (bármely irányba), és az üres hely a H-hoz képest a második mezőn van.
- S átugorhatja H-t, ha H túloldalán üres hely van (bármely irányba), és az üres hely az S-hez képest a második mezőn van.
A cél az, hogy minél kevesebb lépésből kicseréljük a két válogatott tagjait!
A csapatoknak viszont nem kell felváltva lépniük!
A felhasználó úgy vezérli a programot, hogy megadja a kiindulási mező indexét (0-8), majd a célmező indexét (0-8).
Írd meg úgy a programot, hogy ha akár a kiindulási
mező, akár a célmező megadásánál -1-et adunk meg, akkor a program minden
további képernyőre írás nélkül kilép.
A bekért mezőszámokat ellenőrizni kell: előbb bekérjük a két mezőszámot, majd ellenőrizzük. Ha helytelen a lépés, akkor kiírjuk, hogy "Érvénytelen lépés!", majd újra bekérjük mind a kettőt.
A feladat megoldása során pontszám jár a programozási módszertanra, legtöbb pontot helyesen használt objektumorientált módszertannal lehet elérni, de csökkentett pontszámot lehet kapni a strukturált vagy akár a moduláris módszertan használatára is.
Program készítés során figyelj a könnyen áttekinthető és kommentekkel ellátott kódolásra!
Egészítsd ki a programot egy automata funkcióval. Ha a felhasználó a kiindulási mező indexe helyett egy „a” karakter ír be (auto), akkor a gép automatikusan hozza létre a következő lépést (a gép csak helyes lépést generáljon), a kiírás során minden ugyanúgy jelenjen meg, mint manuális módban, csak a választott mező előtt egy „a” betű is jelenjen meg.
Az automata üzemmód lehetőleg úgy működjön, hogy ha minden lépésnél csak az automata üzemmódot használom, akkor a program nem kerül végtelen ciklusba, előbb utóbb megoldásra jut.
A program induláskor írjon ki egy használati utasítást. Ennek megfogalmazása a versenyző feladata. Legyen egyértelmű, lényegre törő.
A program futásának egy részlete:
Lépésszám: 0 ------------------ |H|H|H|H| |S|S|S|S| ------------------ Melyik mezővel lépsz? (0-8) 5 Melyik mezőre lépsz? (0-8) 4 Lépésszám: 1 ------------------ |H|H|H|H|S| |S|S|S| ------------------ Melyik mezővel lépsz? (0-8) 0 Melyik mezőre lépsz? (0-8) 12 Érvénytelen lépés! Melyik mezővel lépsz? (0-8) 6 Melyik mezőre lépsz? (0-8) 5 Lépésszám: 2 ------------------ |H|H|H|H|S|S| |S|S| ------------------
...
Lépésszám: 28 ------------------ |S|S|S|S|H| |H|H|H| ------------------ Melyik mezővel lépsz? (0-8) 4 Melyik mezőre lépsz? (0-8) 5 Lépésszám: 29 ------------------ |S|S|S|S| |H|H|H|H| ------------------ Gratulálok, vége a játéknak!
Kilépéskor:
Lépésszám: 0 ------------------ |H|H|H|H| |S|S|S|S| ------------------ Melyik mezővel lépsz? (0-8) 4 Melyik mezőre lépsz? (0-8) -1
vagy
Lépésszám: 0 ------------------ |H|H|H|H| |S|S|S|S| ------------------ Melyik mezővel lépsz? (0-8) -1