Fondo
¡Despierta para encontrarse perdido en un laberinto unidimensional! Aparece un genio místico (o algo así) y explica que la salida se encuentra frente a usted, pero que entre usted y la salida hay una serie de desafíos. A medida que avanzas, te das cuenta de que todos los llamados desafíos son simplemente puertas cerradas. Primero ve una puerta con un orificio para llave en forma de T, y al no tener esa llave usted mismo, vuelva sobre sus pasos, buscando una llave con T
forma.
Frustrado, encuentras una sopa de llaves del alfabeto en el suelo, ninguna de las cuales coincide con la puerta que has encontrado. Por algún golpe de genio (o idiotez), decides que la t
tecla en forma de minúscula podría caber en la ranura si la atascas con suficiente fuerza. Cuando te acercas a la puerta con la t
llave en minúscula en la mano, el T
agujero se ilumina en verde y la puerta se disuelve frente a ti.
Uno menos, quedan muchos más ...
Reto
El objetivo de este desafío es marcar cuántos pasos te lleva salir del laberinto.
La entrada de este desafío es el laberinto: una cadena que contiene solo caracteres [A-Za-z^$ ]
. Glosario:
^
- El espacio de inicio. La entrada contendrá exactamente uno^
.$
- La salida (¡libertad!). La entrada contendrá exactamente uno$
.[A-Z]
- Las letras mayúsculas significan puertas. Solo puede pasar por esta puerta si ya ha recogido la clave requerida.[a-z]
- Las letras minúsculas significan claves. Recoge estas llaves caminando sobre el espacio que contiene la llave.
Habrá como máximo una de cada letra mayúscula en la entrada. Esto significa que el número total de puertas estará entre 0 y 26 inclusive.
Cada puerta cerrada [A-Z]
tendrá exactamente una tecla de minúscula correspondiente [a-z]
. Puede haber cualquier número de espacios ( ) en la entrada.
Todas las puertas estarán a la derecha del inicio y a la izquierda de la salida. Por lo tanto, no habrá puertas superfluas. Todas las entradas serán solucionables.
La salida para este desafío será un número, el número de pasos que tomó para salir del laberinto.
Algoritmo
Su enfoque metódico para salir de este miserable lugar es el siguiente:
- Comience desde el principio (
^
) y avance (derecha) recogiendo las claves que encuentre. - Cuando cruzas una puerta, si tienes la llave correcta, avanzas hacia la puerta. Si no tiene la llave correcta, camina hacia atrás (izquierda) recogiendo las llaves que encuentra hasta que encuentra la llave de la puerta más reciente que no pudo abrir.
- Una vez que recoja la llave de la puerta problemática actual, gire hacia la derecha y continúe.
- Repita este proceso hasta que salga a la salida (
$
).
Los golfistas experimentados entenderán que su código no tiene que implementar este algoritmo específico siempre que genere el mismo resultado que si hubiera ejecutado este algoritmo.
Contando
Cada vez que pasas de un cuadro a otro, eso cuenta como un paso. Girar 180º no implica ningún paso adicional. No puede avanzar hacia una puerta sin la llave requerida. Debes pisar una llave para recogerla, y debes pisar la salida para ganar. Después de su primer movimiento, el espacio de inicio ( ^
) se comporta como cualquier otro espacio regular.
Ejemplos
En estos ejemplos, dejé los espacios como subrayados para la legibilidad humana.
Entrada es _a_^_A__$__
. La salida es 11
. Da un 1
paso adelante, nota que no tiene llave para la A
puerta, y luego sobre la cara. Camina hacia atrás hasta que ocupe el espacio que contiene los a
( 3
pasos hacia atrás, ahora 4
total). Luego camina hacia adelante hasta que ocupe el espacio que contiene la salida ( 7
pasos hacia adelante, 11
total).
Entrada es b__j^__a_AJB_$
. La salida es 41
: Realiza dos viajes separados a la parte posterior del laberinto, uno para obtener la j
clave y el siguiente para obtener la b
clave.
Entrada es __m__t_^__x_T_MX_$____
. La salida es 44
. No hará ningún viaje adicional para obtener la x
llave, ya que la recogió en su camino desde el principio hasta la puerta T
.
Entrada es g_t_^G_T$
. La salida es 12
. No puedes moverte al G
espacio sin una llave, e inmediatamente sobre la cara. Tienes la suerte de recoger la t
llave en el camino a la g
llave, y así abrir ambas puertas en tu camino hacia la libertad.
Entrada es _^_____$
. La salida es 6
. Eso fue fácil.
Pautas de E / S y criterio ganador
Se aplican las reglas estándar de E / S. Este es un desafío de código de golf .
A
en bA^aB$
que no sería superfluo tampoco. ;)