Bob a été kidnappé et est coincé dans un labyrinthe. Votre travail consiste à l'aider à trouver une issue. Mais comme c'est un labyrinthe très sombre et effrayant, il ne peut rien voir. Il ne peut sentir les murs que lorsqu'il s'y précipite et sait quand il a trouvé la sortie, mais il n'en sait rien de plus.
Puisqu'il doit exécuter votre programme par mémoire, il doit être aussi court que possible.
Remarque: J'ai pris ce problème à partir de http://acmgnyr.org/year2016/problems.shtml , mais je l'ai adapté légèrement et j'ai écrit moi-même le programme juge / les cas de test.
spécification
- Il s'agit d'un problème interactif, donc votre programme générera des mouvements vers stdout et recevra les réponses de stdin.
- Votre sortie peut l' un des programmes les mouvements
right
,left
,down
,up
. - Il obtiendra alors en entrée l'un des éléments suivants:
wall
- cela signifie que Bob a heurté un mur. Bob restera au même endroit.solved
- Bob a trouvé la sortie! Votre programme devrait maintenant également quitter sans imprimer autre chose.ok
- Bob a pu se déplacer dans la direction donnée.
- Si le labyrinthe n'a pas de sortie, votre programme devrait sortir
no exit
pour faire savoir à Bob qu'il doit abandonner. Votre programme devrait alors quitter sans imprimer autre chose. - Étant donné que Bob est pressé de sortir, votre programme ne devrait pas faire de mouvements étrangers. En d'autres termes, votre programme n'est pas autorisé à se déplacer dans la même direction à partir du même carré deux fois .
- C'est du golf de code , donc le programme le plus court gagne!
Exemples
Dans les exemples suivants, S
est le carré de départ, X
est la sortie, #
est un mur et les espaces sont des carrés valides. Puisqu'il n'y a pas de réponse correcte unique, ce ne sont que des exemples d'exécutions d'une solution. Notez également que les dessins du labyrinthe sont juste là pour que vous puissiez les voir, et votre programme ne les recevra pas en entrée.
########
#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
Programme Checker
- J'ai écrit un vérificateur de solution en Python. Vous pouvez le trouver sur https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19 .
- Exécutez-le comme
python mazechecker.py ./mazesolver
. - Il testera votre programme sur tous les labyrinthes d'un dossier appelé
mazes
. - Les labyrinthes sont dans des fichiers séparés dans le même format que ci-dessus.
- Il vérifie toutes les conditions énumérées ci-dessus et vous avertit si votre solution en viole une.
- Vous pouvez lui faire imprimer des informations de diagnostic supplémentaires avec
python mazechecker.py -d ./mazesolver
. - Vous pouvez trouver un
mazes
dossier zippé ici . Vous pouvez également y ajouter le vôtre si vous le souhaitez.
solved
lors de la sortie no exit
? Dans l'affirmative, veuillez l'indiquer dans les règles, pas seulement dans les cas de test!
x,y
et partez up
, avec répondre wall
, puis right
avec encore répondre wall
, puis-je réessayer up
, ou sont-ils seulement left
et down
toujours disponibles puisque je n'ai pas encore déménagé de cette place?