Eres un raton Todos tus amigos del ratón han sido capturados, y están inconscientes y atrapados en un laberinto que solo tiene una entrada / salida. Tienes un mapa perfecto del laberinto, por lo que puedes trazar una solución para apresurarte y llevarlos a todos a un lugar seguro. Sin embargo, el laberinto está protegido con un sistema de seguridad que activará una alerta si 1000
se alcanza un umbral de , lo que hace que seas capturado y falles en tu misión de rescate.
De sus investigaciones anteriores sobre el laberinto, cada cuadrado que pisa (es decir, cada movimiento horizontal o vertical, los ratones no pueden moverse en diagonal ) se suma 1
al contador del sistema de seguridad. Sin embargo, si lleva un peso (ya sea un bloque de dinamita o un ratón amigo inconsciente), en su lugar se agrega, 2
ya que detecta la presión adicional. La plaza de entrada / salida no tiene este sistema de seguridad, por lo que no se agrega al mostrador.
Tienes un suministro ilimitado de dinamita que has traído a la entrada, por lo que puedes volar todos los muros para liberar a tus amigos. Pero debe tener cuidado al hacerlo, ya que cada explosión se suma 50
al contador por la presión de conmoción. Además, solo puede llevar una cosa a la vez, ya sea un mouse o un bloque de dinamita. Dado que cada bloque de dinamita solo puede detonar un espacio de pared, esto significa que si hay varias paredes en una fila, debe hacer un viaje con las manos vacías de regreso a la entrada para agarrar más.
Ejemplo resuelto
Supongamos que nuestro laberinto se ve así:
######
#M# E#
######
Lo usaré c
para el mostrador. Empezamos por el E
ntrance, movemos quede un solo cuadrado en el ejercicio de la dinamita, c=2
. Nos detonar la dinamita para explotar la pared, c=52
. Nos movemos dos casillas a la izquierda, con las manos vacías, para llegar c=54
, y ahora estamos parados en la casilla del ratón. E
Recogemos a nuestro amigo y volvemos 3 casillas al xit, pero la última casilla no cuenta, ya que no tiene sensores, por lo que solo hay 2 casillas con algo en la espalda. Eso significa que cuando llegamos a la salida con el mouse final c=58
, que es menor que 1000
, y por lo tanto, la misión tiene éxito.
Reto
Dado un laberinto de entrada, salida si usted, el héroe del ratón, puede rescatar con éxito a todos los ratones atrapados dentro de las limitaciones descritas anteriormente, o si la misión es un fracaso.
Entrada
- Un laberinto 2D en cualquier formato aceptable (cadena multilínea, matriz de cadenas, etc.).
- Para este desafío, lo usaré
#
tanto para las paredes interiores como para las exteriores,M
para los amigos del ratón yE
para la entrada. - La entrada nunca estará inmediatamente adyacente a una pared interior (siempre habrá al menos un espacio para moverse libremente).
- Puede sustituir cualquier carácter ASCII imprimible que desee siempre que sea coherente. Esto le permite usar dos símbolos diferentes para las paredes interiores frente a las paredes exteriores, siempre y cuando mantenga la consistencia (por ejemplo, si elige usar
@
para las paredes interiores en su lugar y se va#
hacia el exterior, cada pared interior debe ser@
y cada pared exterior#
) - El laberinto siempre estará completamente delimitado por paredes, pero no es necesariamente rectangular. Si lo desea, puede suponer que el laberinto se rellena con espacios para hacer una entrada rectangular (opcional).
- El laberinto puede tener secciones inalcanzables sin dinamita.
- No puedes dinamitar las paredes exteriores del laberinto.
Salida
Un valor verdadero / falso . Verdad para "Sí, el mouse puede rescatar a cualquier otro mouse" o Falsey para "No, el sistema de alarma se disparará".
Las normas
- Un programa completo o una función son aceptables.
- Las lagunas estándar están prohibidas.
- Este es el código de golf, por lo que se aplican todas las reglas habituales de golf, y gana el código más corto (en bytes).
Ejemplos
Ejemplos verdaderos, separados por líneas en blanco.
#####
#M E#
#####
######
#M# E#
######
########
#E # M#
# # #
# # #
# #
########
#############################
# ## # # #
# M ## M # # #
# ## # M # E #
#M ## # # #
#############################
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMM MM#
#MMMMMMMMMMMME#
###############
Ejemplos de Falsey, separados por líneas en blanco
#############################
#M ## ## ## #
# M ## M ## ## #
# ## ## M ## E #
#M ## ## ## #
#############################
#############################
########
########
# # #
# M # M#
########
#####
# M #
#####
#####
#####
#####
###################
# # # ## ## # # #
#M#M#M## E ##M#M#M#
# # # ## ## # # #
###################
#######
######
#####
####
# M#
####
###############
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMMM#
#MMMMMMMMMMMME#
###############