IB001 – Zadání testu

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ářů).


Robot Karel

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: 
cursor

Naprogramujte tyto příkazy:

Pokud uživatel zadá neexistující příkaz, program to oznámí.

Bonus, za který budou body navíc:


Základní bodování (35 bodů): Bonus:

Valid XHTML 1.1Valid CSS!