Bob è stato rapito ed è bloccato in un labirinto. Il tuo compito è aiutarlo a trovare una via d'uscita. Ma dal momento che è un labirinto molto oscuro e spaventoso, non riesce a vedere nulla. Riesce a sentire i muri solo quando ci si imbatte, e sa quando ha trovato l'uscita, ma non ne sa più niente.
Dal momento che deve eseguire il programma in memoria, deve essere il più breve possibile.
Nota: ho preso questo problema da http://acmgnyr.org/year2016/problems.shtml , ma l'ho adattato leggermente e ho scritto personalmente il programma del giudice / casi di test.
specificazione
- Questo è un problema interattivo, quindi il tuo programma eseguirà l'output degli stdout e riceverà le risposte dallo stdin.
- Il programma può uscita una delle mosse
right
,left
,down
,up
. - Verrà quindi visualizzato come input uno dei seguenti:
wall
- questo significa che Bob ha colpito un muro. Bob rimarrà nello stesso posto.solved
- Bob ha trovato l'uscita! Ora il tuo programma dovrebbe uscire anche senza stampare nient'altro.ok
- Bob è stato in grado di muoversi nella direzione indicata.
- Se il labirinto non ha uscita, il tuo programma dovrebbe uscire
no exit
per far sapere a Bob che dovrebbe arrendersi. Il programma dovrebbe quindi uscire senza stampare nient'altro. - Poiché Bob ha fretta di uscire, il tuo programma non dovrebbe fare mosse estranee. In altre parole, al tuo programma non è consentito muoversi nella stessa direzione due volte dallo stesso quadrato .
- Questo è code-golf , quindi vince il programma più breve!
Esempi
Negli esempi seguenti, S
è il quadrato iniziale, X
è l'uscita, #
è un muro e gli spazi sono quadrati validi. Poiché non esiste un'unica risposta corretta, si tratta solo di esempi di una soluzione. Nota anche che i disegni del labirinto sono lì solo per te da vedere, e il tuo programma non li riceverà come input.
########
#S #
###### #
# #
#X#
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
solved
#####
# S #
#####
right
ok
right
wall
down
wall
up
wall
left
ok
down
wall
up
wall
left
ok
down
wall
up
wall
left
wall
right
ok
no exit
solved
###############################
#S #
############## ### #
# #X# #
# #
##################
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
ok
right
wall
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
ok
down
ok
down
ok
down
wall
left
ok
down
wall
up
ok
up
ok
left
wall
down
ok
left
wall
down
ok
left
ok
down
wall
up
wall
left
ok
down
wall
up
solved
Programma Checker
- Ho scritto un correttore di soluzioni in Python. Puoi trovarlo su https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19 .
- Eseguilo come
python mazechecker.py ./mazesolver
. - Testerà il tuo programma su tutti i labirinti in una cartella chiamata
mazes
. - I labirinti sono in file separati nello stesso formato dall'alto.
- Controlla tutte le condizioni sopra elencate e ti avvisa se la tua soluzione viola una qualsiasi.
- Puoi farlo stampare ulteriori informazioni diagnostiche con
python mazechecker.py -d ./mazesolver
. - Puoi trovare una
mazes
cartella zippata qui . Puoi anche aggiungere il tuo se lo desideri.
solved
quando l'output no exit
? In tal caso, si prega di dichiararlo nelle regole, non solo nei casi di test!
x,y
e vai up
, con risposta wall
, quindi right
con ancora risposta wall
, posso quindi riprovare up
, o sono solo left
e down
ancora disponibili da quando non mi sono ancora spostato da questa piazza?