Bob fue secuestrado y está atrapado en un laberinto. Tu trabajo es ayudarlo a encontrar una salida. Pero como es un laberinto muy oscuro y aterrador, no puede ver nada. Solo puede sentir las paredes cuando se topa con ella, y sabe cuándo ha encontrado la salida, pero no sabe nada más.
Como tiene que ejecutar su programa de memoria, debe ser lo más corto posible.
Nota: Tomé este problema de http://acmgnyr.org/year2016/problems.shtml , pero lo adapté un poco y escribí el programa del juez / casos de prueba yo mismo.
Especificación
- Este es un problema interactivo, por lo que su programa generará movimientos en stdout y aceptará respuestas de stdin.
- Su programa puede una salida de los movimientos
right
,left
,down
,up
. - Luego obtendrá como entrada uno de los siguientes:
wall
- Esto significa que Bob ha golpeado una pared. Bob se quedará en el mismo lugar.solved
- Bob ha encontrado la salida! Su programa ahora también debería salir sin imprimir nada más.ok
- Bob pudo moverse en la dirección dada.
- Si el laberinto no tiene salida, su programa debería salir
no exit
para que Bob sepa que debe darse por vencido. Su programa debería salir sin imprimir nada más. - Como Bob tiene prisa por salir, su programa no debe hacer movimientos extraños. En otras palabras, su programa no puede moverse en la misma dirección desde la misma casilla dos veces .
- Este es el código de golf , por lo que gana el programa más corto
Ejemplos
En los siguientes ejemplos, S
es el cuadrado inicial, X
es la salida, #
es un muro y los espacios son cuadrados válidos. Como no hay una respuesta correcta única, estos son solo ejemplos de ejecuciones de una solución. También tenga en cuenta que los dibujos del laberinto están ahí para que los vea, y su programa no los obtendrá como entrada.
########
#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
Programa de corrector
- He escrito un corrector de soluciones en Python. Puede encontrarlo en https://gist.github.com/Maltysen/f0186019b3aa3812d812f8bb984fee19 .
- Ejecútalo como
python mazechecker.py ./mazesolver
. - Pondrá a prueba su programa en todos los laberintos en una carpeta llamada
mazes
. - Los laberintos están en archivos separados en el mismo formato desde arriba.
- Comprueba todas las condiciones enumeradas anteriormente y le notifica si su solución viola alguna.
- Puede hacer que imprima información de diagnóstico adicional con
python mazechecker.py -d ./mazesolver
. - Puede encontrar una
mazes
carpeta comprimida aquí . También puede agregar el suyo si lo desea.
solved
al salir no exit
? Si es así, indíquelo en las reglas, ¡no solo en los casos de prueba!
x,y
e ir up
, con responder wall
, luego right
con otra respuesta wall
, ¿puedo intentarlo de up
nuevo? ¿o solo left
y down
todavía disponible ya que todavía no me he mudado de esta plaza?