Feladat: I.364 Korcsoport: - Nehézségi fok: -
Füzet: 2015/január, 34 - 36. 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.

Egy n×n-es négyzetekből (mezőkből) álló pályán egy robotot irányítunk. A robot a pálya üres mezőin tud mozogni egyenesen fölfelé, lefelé, jobbra és balra. A pályát mind a négy oldalról fal veszi körbe, ugyanakkor a belső négyzetek egy része is akadály, melyeken a robot nem tud áthaladni. A robotot az F, L, J, B nagybetűk sorozatával lehet irányítani, és úgy mozog, hogy a betű hatására elindul az aktuális helyéről a jelzett irányba és addig megy, amíg szabad előtte a pálya, majd megáll az első útjába eső akadály vagy fal mellett. Példaként tekintsük az ábrán látható, n=10 értékhez tartozó pályát.

 
 

Készítsünk programot i364 néven, amely megoldja a következő feladatokat:
1.Olvassuk be a palya.txt szöveges állományból a pálya adatait. A szöveges állomány első sorában 1n20 értéke található, a következő sorában a pályán megtalálható akadályok száma, majd minden ezt követő sorban az akadályok oszlop és sor koordinátái szóközzel elválasztva.
2.Rajzoljuk ki a beolvasott pályát karakterekkel úgy, hogy a sarkokat és a belső akadályokat nagy X betűvel, a falakat mindegyik oldalon a sor és oszlop koordináták utolsó számjegyével jelöljük.
3.Kérjünk be a felhasználótól egy oszlop és egy sor koordinátát, és adjuk meg, hogy a pályán szabad-e az így megadott mező. A kimenet például a következő: ,,A (3,5) mező szabad.''
4.Válasszunk véletlenszerűen egy szabad mezőt a pályáról, és tároljuk el a koordinátáit a többi programrész megoldásához, és írjuk ki a képernyőre: ,,A robot induló helye a (6,4) mező.''
5.Adjuk meg azoknak a mezőknek a koordinátáit, amelyekre az előbb választott induló mezőről egy lépésben el lehet jutni. A fenti példában a kimenet: ,,Egy lépésben elérhetőek a (6,3), (6,7), (3,4), (10,4) mezők.''
6.Kérjünk be a felhasználótól egy karaktersorozatot, amely a robotnak adott parancsokat jelenti. A szövegből csak az irányokat jelző kis- vagy nagybetűket értelmezzük, a többi karaktert hagyjuk figyelmen kívül. Írjuk a mozgas.txt szöveges állományba a kiinduló helynek és azoknak a pontoknak a koordinátáit, amelyeken megáll a robot a parancssorozat végrehajtása közben. A robot mozgatása a 4. feladatban kisorsolt mezőről induljon. Példaként legyen a bekért karaktersorozat ,,FFjLeBF''.
 
Példa bemenet (palya.txt)  Példa kimenet (mozgas.txt)  10   6 4   8   6 3   2 4   6 3   3 7   7 3   4 10   7 10   5 5   7 10   6 2   5 10   6 8   5 6   8 3   9 8   
 

7.Az előbb bekért parancssorozatot javítsuk és egyszerűsítsük úgy, hogy csak a megfelelő irányok nagybetűit tartalmazza, és hagyjunk el belőle minden olyan lépést, amely az adott pályán nem változtatja meg a robot helyét. A kimenet a példában legyen: ,,A javított lépéssorozat: FJLBF''.

Beküldendő egy tömörített i364.zip állományban a program forráskódja (i364.pas, i364.cpp, ...) az .exe és más, a fordító által generált állományok nélkül, valamint a program rövid dokumentációja (i364.txt, i364.pdf, ...), amely a fentieken túl megadja, hogy a forrás mely fejlesztői környezetben fordítható.