Řešení pro Úkol 4-1 – Robotí bludiště
Řešení
Že budeme muset prohnat roboty po bludišti je jasné na první pohled. Nejprve zkusíme prohlédnout hříště – máme tu spoustu šipeček, otazníků (patrně křižovatky) a kromě nich jsou tam ještě písmenka S1
až S8
, stejný počet C
a několik F
a Z
. Protože počet S
a C
je stejný, jako počet robotů dole, nebude těžké uhodnout, že se jedná o starty a cíle. Fajn, můžeme tedy prvního robota nasadit na S1
.
Písmenka F
a Z
se neobjevují jen na ploše, ale pozorný luštitel odhalí, že i anténky robota mají tento tvar. Všiml si toho někdo už před začátkem kola, když Edna zlá bedna, jak robota pojmenoval někdo z týmů, vystrkoval hlavu zpoza webstránky? Je tu určitě souvislost, ale jak přesně robot funguje budete muset vydedukovat. Naštěstí s tím pomůžou obrázky a komix na vrchu zadání. Všimněte si zvláštního trávicího systému našeho robota. Má v sobě pořadač, ve kterém jsou už předem naplněny příkazy směrů. Zdá se, že robot má dva pořadače s odlišným chováním. Do jednoho vede vstup i výstup nahoře, do druhého je nahoře jen vstup a výstup dole. Prohlédněte si komix, uvidíte, že jsou dvě možnosti jak vzít někoho v poředí. Buď toho, kdo přišel první, nebo toho, kdo přišel poslední. U zadání i vidíte, že robot má na hlavě přepínač, kterým se přepíná mezi tzv. frontou a zásobníkem.
A protože robot neremcá a plní příkazy, pojďme zkusit příkazy provést a cestou si ujasníme několik drobností. Postup robota a přemýšlení by mohl vypadat nějak takto:
- Nasadím toho prvního vlevo dole na S1.
- Úvodní směr pohybu je předpokládám podle šipky u robota, tj. nahoru.
- Jdu, seberu příkaz vlevo.
Vsuvka - nevím, jestli brát směry absolutně nebo relativně. Protože v
robotech jsou vždy šipka odspodu někam, tak to beru spíš relativně, tj.
jak by se měl otočit od svého současného směru a ne absolutní směr, kam se
bude pohybovat.
- Předpokládám, že šipku jsem jen spapal, dám ji do zásobníku nahoru,
tj. v něm mám navrchu L a předpřiravenými PPL.
- Šipka není křižovatka, takže se stále pohybuji nahoru. Spapám rovně.
To mě znejisťuje, protože jsem se výše rozhodl interpretovat otáčky
relativně od aktuálního směru, ale pak nechápu, proč by v zadání měly
být směry rovně, které nezmění směr pohybu. Každopádně v zásobníku mám
RLPPL.
- Stále se pohybuji rovně nahoru až k první křižovatece s otazníkem. Tam
vyjmu ze zásobníku to, co je navrchu, tj. Rovně. Pohybuji se tedy z
křižovatky furt nahoru a v zásobníku mám LPPL.
- Zobnu P, mám v zásobníku PLPPL.
- Na další křižovatce se točím vpravo a mířím na východ. V zásobníku
zbývá LPPL.
- Přeběhnu přes písmenko F. Uvažuji, co bych měl dělat. Buď přepnout
okamžitě na frontu a nebo jen zobnout F do zásobníku. Přepnout na
frontu by mě asi napadlo hned, ale není to konsistentní s tím, že
šipky jsem také jen zobal a nevykonával, dokud jsem nedošel na
křižovatku, takže spíš zkusím jen zobnout. V zásobníku mám FLPPL.
- Dojdu na křižovatku na okraji plochy. V zásobníku zobnu F, přepínám na
frontu, kde je RPP (zapisuji zeshora dolů, ale odebírat budu odzdola).
- Protože jsem jen přepnul přepínač, směr pohybu neměním a ocitnu se
mimo plochu. To je špatně, takže backtrackuji k F.
- U F se přepnu ze zásobníku na frontu hned na místě, tj. mám RPP.
- Dojdu na křižovatku, odeberu P, otáčím se doprava, tj. na jih. V
zásobníku je RP.
- Už vidím, jak tam asi bude zakroucená nožička R.
- Dorazím na křižovatku, odebírám P, točím se doprava, tj. na západ, v
zásobníku zbývá R.
- Přejdu Z, přepínám na zásobník. V něm zbylo od minule myslím LPPL.
Neměním směr, pokračuji na západ.
- Pokračuji na křižovatku, tam L otáčí na jih, v zásobníku zbývá PPL.
- Zobu L, v zásobníku je tedy LPPL a pokračuji stále na jih.
- Na křižovatce točím doleva, tj. na východ. V zásobníku PPL.
- Na křižovatce hned vedle točím na jih. PL.
- Cestou zobu L, tj. mám LPL.
- Na křižovatce točím L, jdu na východ. Zbývá PL.
- Na křižovatce točím doprava, tj. na jih, dělám krok a jsem v cíli.
Končím pohyb, v zásobníku zbylo ještě nevyužité L.
Vyšlo písmenko R, teď je možnost pokračovat s dalšími roboty. Postupně získám
všechna písmenka hesla Ricochet.