Professional Documents
Culture Documents
Webterv Nyomorékság
Webterv Nyomorékság
Webterv Nyomorékság
házi feladat
Általános tudnivalók
Az elkészített php fájlt vagy fájlokat tömörítve, zip formátumban kell feltölteni. A zip csak az elkészített PHP
fájlokat tartalmazza, más egyebet ne.
A feladat beadható a bíró által jelzett határidőig, legfeljebb a bíró által jelzett alkalommal.
Amennyiben egy részfeladat tesztelése közben végzetes hiba keletkezik, akkor az adott részfeladat további
tesztjei nem futtathatóak. Az esetleges hibaüzenetek az errors.txt fájlban megtekinthetőek.
A szintaktikai hibás program garantáltan 0 pontot ér.
A feltöltések közül a legmagasabb pontszámú számít.
A bíró által adott pontszám felülbírálására utólag nincs lehetőség.
A program outputja az stdout.txt-ben megtekinthető, míg a hibaüzenetek az errors.txt fájlban találhatók.
A kiértékelés eredménye a riport.txt-ben megtekinthető, ahol látható, hogy melyik részfeladaton hány
pontot sikerült elérni.
A bírón 7.4.33-as verziójú PHP verzió fut.
Pontszámítás
A házi feladatra legfeljebb 4 pont szerezhető, amelyet úgy számítunk, hogy a Bíró által adott pontot elosztjuk 150-
nel.
A Bíró a programot 10 tesztesetre futtatja, amelyekre egyenként legfeljebb 100 pontot ad (összesen 1000), így a
maximális 4 pont megszerzéséhez 600 pontot kell elérni. Aki ennél több pontot ér el, annak a 600 ponton felüli részt
extra pluszpont ként (lásd: követelmények) számoljuk el. Ez azt jelenti, hogy ha a bíró 900 pontot ad, akkor az a
házi feladatra 4 pontot ér, és ezen kívül jár 2 extra pluszpont.
Részpont szerezhető.
Álomhurok
STORY
A lángfű-erdő egy mágikus hely, ahol számos élőlény él, köztük a fénykavarók. A lángfű-erdőben teremnek a
lángfüvek, amelyek minden évben virágzáskor lángokba borítják az erdőt. A fénykavarók a föld közelében élnek,
nem tudnak fára mászni sem, így ki vannak téve minden évben a lángfüvek virágzásának, amiben sajnos a 90%-uk
elpusztul. A fénykavarók a kihalás szélén állnak, évről évre egyre kevesebben vannak.
STORY
Azonban az álomhurok egy veszedelmes hely. Amint belép valaki, mögötte a bejárat azonnal lezárul, és már csak
úgy tud kijutni, ha megtalálja a kijáratot, ami már önmagában is nehéz feladat. Emellett viszont az időszakító
kristályt is meg kell találni a labirintus végtelen falai között. Az idő azonban fogy, mert az álomhurok védői, az
álommanók amint észreveszik a betolakodókat, beindítják a csapdákat, amelyek a földből emelkednek fel és
megölik a bátor vállalkozót, bárhol is legyen az álomhurokban. Szóval sietni kell.
További célunk, hogy megtaláljuk az időszakító kristályt, amelyet szintén minden lépés után megvizsgáljuk, hogy
látjuk-e.
Fal: a falakon nem látunk át, és nem is lehet a falra lépni. A labirintus falakkal van körülvéve.
Fű: ezek azok a mezők, amelyeken mozoghatunk, ide szabadon léphetünk
Item: az a füves terület, amely az időszakító kristályt tartalmazza. Amint rálépünk erre a mezőre,
hagyományos füves területté változik, a kristályt pedig onnantól kezdve cipeljük magunkkal.
Bejárat: a labirintus bejárata, ahonnan indulunk. Ez biztos a labirintusnak valamelyik szélén található. Amint
ellépünk róla, a növények belepik, tehát "fal" lesz onnantól kezdve a helyén, többször már nem tudunk oda
visszamenni.
Kijárat: a labirintus kijárata, célunk, hogy ide elérjük. Ha a kijárat felé nézünk, akkor akármilyen messze
ellátunk, innen tudjuk, hogy kijutottunk (viszont az első lépésnél a bejárat esetében ugyanez igaz).
Fénykavaró osztály
A Fenykavaro osztály egy fénykavarót reprezentál, aki elég bátor volt ahhoz, hogy bemenjen az álomhurokba. Az
osztálynak két metódusa van, az init és a step . Az osztályt természetesen tetszőleges (nem statikus)
adattagokkal és metódusokkal bővíthetjük.
init() metódus
Amikor a fénykavaró a labirintusba lép, akkor ez a metódus fog meghívódni. Itt végezhetünk el mindenféle
inicializációt, amire szükségünk van. A metódus 2 paramétert vár: min és max .
min: ha optimálisan haladunk, akkor ennyi lépéssel tudunk kijutni a labirintusból úgy, hogy az időszakító
kristályt is felszedjük. Elképzelhető, hogy hamarabb is ki lehet jutni, de csak akkor, ha az időszakító kristályt
nem vesszük fel, tehát a labirintusban hagyjuk.
max: legfeljebb ennyi lépés áll rendelkezésünkre, különben meghalunk.
step() metódus
Ez a metódus minden lépésben meghívódik, amíg el nem jönnek az álommanók (azaz elérjük a maximális
lépésszámot) vagy ki nem juttattuk a fénykavarót. Paraméterként egy asszociatív tömböt kap, amely leírja, hogy a
fénykavaró melyik irányban mit lát. A metódusnak egy szöveget kell visszaadnia, ami megmondja, hogy a következő
lépésben melyik irányba szeretnénk 1 mezőnyit elmozdulni.
State tömb
A step metódus paraméterben egy asszociatív tömböt kap, aminek az alábbi kulcsai vannak: up , down ,
left , right és item . Az első négy (up, down, left, right) megmondja, hogy az adott irányba hány mező
távolságig látunk el (pl. ha 3 mező távol van egy fal, akkor 2 mezőt látunk magunk előtt). Az item egy további
asszociatív tömb, amely azt mondja meg, hogy hol található az időszakító kristály. Ennek két kulcsa van
( direction (melyik irány: UP, DOWN, LEFT, RIGHT), illetve distance (hány mező távolságnyira található az
adott irányban)). Amennyiben nem látjuk a jelenlegi pozíciónkból a kristályt, akkor az item kulcshoz tartozó érték
NULL lesz.
Visszatérési érték
A step metódusnak 4 féle visszatérési értéke lehet: UP , DOWN , LEFT vagy RIGHT , attól függően, hogy
merre szeretnénk mozogni. Hibás visszatérési érték (vagy érvénytelen lépés) esetén ugyanazon a pozíción maradunk,
ahol a megelőző körben voltunk, továbbá büntetőpontot kapunk.
Pontozás
Összesen 10-féle lehetséges labirintus létezik, amelyben a fénykavarók az időszakító kristályt keresik. Mindegyik
labarintusban legfeljebb 100 pont érhető el, az alábbiak szerint:
Az adott labirintusra kapott pontszám ezeknek az összege lesz. A kapott pontszám 0 alá nem csökkenhet.
PÉLDA L ABIRINTUS
A lila jelöli a kezdő pozíciót, a kék a célt, a piros a kristályt, a sárga a füves területeket, míg a fekete a falakat. Ebben
a labirintusban a helyes útvonal: 'UP', 'UP', 'UP', 'DOWN', 'DOWN', 'LEFT', 'LEFT', 'LEFT',
'UP', 'UP', 'LEFT', 'UP', 'UP', 'LEFT', 'LEFT', 'UP', 'LEFT', 'UP', 'UP', 'RIGHT',
'RIGHT', 'RIGHT', 'RIGHT', "RIGHT", "RIGHT", "RIGHT", 'UP' .
MINTA.ZIP
A minta.zip-ben található 3 fájl.