Na řešení máte alespoň 75 minut, při smysluplné práci může být prodlouženo. Práci si průběžně ukládejte/zálohujte. Po konci testu odevzdejte zdrojový kód (jeden soubor s příponou ".c", nic jiného) do připravené odevzdávárny v IS.
Pište čitelně (zahrnuje i vhodné používání komentářů).
Program umožní uživateli řídit robota zadáváním příkazů. Robot se pohybuje po 2D mapě složené ze čtvercových políček. Poloha robota je vždy jednoznačně určena jeho celočíselnými souřadnicemi [X, Y] a jeho natočením, které může nabývat čtyř hodnot: Sever, Jih, Východ, Západ.
Mapa má rozměry 19 × 9 políček. Na políčku může buď stát zeď, nebo může být volné. Na každém volném políčku můžou být namalované až 4 tečky. Na začátku stojí robot uprostřed mapy a míří na sever. Okrajová políčka mapy jsou zaplněná zdmi. Zdi jsou také na 15 dalších, náhodně vybraných políčkách uvnitř mapy, ne ale na startovní pozici robota. Zbylá políčka jsou volná, nikde nejsou žádné tečky.
Políčka vykreslujte jako dvojice znaků. Zdi jako ##
, prázdná políčka
, políčka s jednou až čtyřmi tečkami .
, :
, :.
a ::
. Pokud na vykreslovaném políčku právě stojí robot, místo prvního znaku vykreslete ikonu robota (první znak políčka tak bude robotem "zakrytý"). Podle aktuálního natočení robota použijte jeden z těchto symbolů/šipek: ^
, <
, V
, >
. Pokud chcete, můžete políčkům přidat nějaké orámování.
Po každém zadání příkazu se příkaz provede a celá aktuální situace (mapa i s šipkou znázorňující robota) se znovu vykreslí. Pod vykreslenou situaci zobrazte výzvu k zadání dalšího příkazu.
Příklad. Robot stojí na políčku [8, 2] a míří na východ. Na jeho políčku je buď žádná, jedna, nebo dvě tečky (momentálně to nevíme jistě; pokud tam tečky jsou, jsou zakryté robotem; určitě tam ale nejsou tři ani čtyři, protože ty by vykukovaly zpoza robota). Na políčkách okolo jsou jedna, dvě, tři a čtyři tečky.
[...případné předchozí výstupy...]
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##| | | | | |##|: | |. | | | | | | | | |##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##| | | | | | | |> | |##| | |##| | | | |##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##|##| | | | | |:.| |::| | | |##| | | | |##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##| | |##| | | | | | | |##| |##| |##|##| |##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##| | | | | | | | | | | | | | | | | |##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##| | | |##|##| | | | | | | | |##| | |##|##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##| | | | | | | | | |##| | | | | | | |##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|##|
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
command:
"exit"
:
Ukončí program."left"
:
Robot se otočí o 90 ° doleva. (Tj. pokud předtím směřoval na sever, bude teď mířit na západ)."right"
: Robot se otočí o 90 ° doprava. (Tj. pokud předtím směřoval na sever, bude teď mířit na východ)."step"
:
Pokud by nevyšel z mapy, a pokud před ním není zeď, robot se posune o jedno políčko aktuálním směrem. Jinak oznámí, že nemůže udělat krok."drop"
:
Pokud na políčku, na kterém robot stojí, není 4 nebo více teček, jednu tečku přidá. Jinak oznámí, že se tam další tečka nevejde."pick"
:
Pokud na políčku, na kterém robot stojí, je alespoň jedna tečka, jednu tečku smaže. Jinak oznámí, že tam žádné tečky nejsou.Pokud uživatel zadá neexistující příkaz, program to oznámí.
Bonus, za který budou body navíc:
"save"
:
Uloží kompletní situaci do souboru "save.dat" v aktuálním adresáři. (Pokud soubor neexistuje, vytvoří ho. Pokud existuje, přepíše ho. Pokud při vytváření souboru dojde k chybě, oznámí to.)"load"
:
Načte kompletní situaci ze souboru "save.dat" v aktuálním adresáři. (Nebo ohlásí chybu při otevírání souboru.)exit
.left
a right
.step
.drop
a pick
.save
a load
.