O tal vez no es realmente un laberinto, pero aún así.
Reglas:
De entrada es una cadena de dos líneas, que consiste en
*
,1
,x
yX
. Esa cuerda es un laberinto para caminar. Las líneas tienen la misma longitud .Puede tomar la entrada como una cadena con
,
(coma) o cualquier separador conveniente entre estas dos líneas. O podría tomar ambas líneas como argumentos separados para su función.La salida es el número de pasos que debe seguir para salir de la cadena (el último paso es el paso que lo mueve fuera de la cadena).
Empiezas en la esquina superior izquierda (la línea superior), antes del primer símbolo.
Para cada paso, se mueve hacia adelante por un símbolo (de n-ésimo (n + 1) ésima posición ). Luego, dependiendo del personaje que pises, el resultado es diferente. Esto es lo que hace cada personaje:
*
- nada. Simplemente lo pisas normalmente.x
- una vez que lo pisó, cambie la línea, pero permanezca en la misma distancia horizontal desde el principio. Por ejemplo, pisó la tercera posición de la línea superior y encontró una minúsculax
aquí. Luego te mueves inmediatamente a la línea inferior, pero nuevamente en la tercera posición.X
- cambie la línea y pase a la siguiente posición. El ejemplo es el mismo allí, pero también te mueves de la tercera a la cuarta posición (por lo tanto, estás en la segunda línea en la cuarta posición).1
- Solo avance una posición más.
Una vez que cada personaje hace su trabajo, se reemplaza con un espacio y ya no "funciona".
Siguen ejemplos.
Entrada :
x *
Como se dijo antes, comienza antes del primer símbolo de la primera línea. El primer paso te mueve en letra
x
y esta letra te cambia a la segunda línea. La letrax
ya no funciona comox
, sino que se reemplaza con*
. Esto será más relevante en los últimos ejemplos. Ahora estás en un asterisco en la línea inferior, y no te hizo nada.El segundo paso es avanzar y salir de la cadena, por lo que se completa el laberinto, y tomó 2 pasos.
Salida
2
.Entrada :
xX* x1*
1er paso : avanzas
x
, lo que te mueve en lax
línea inferior. Aquí viene la regla que dice que el carácter usado se reemplaza con un asterisco. Luego retrocede en la primera línea, pero ya no estáx
allí, ya que se ha utilizado y se convirtió en un asterisco. Entonces, se mueve con seguridad en este asterisco y se completa el paso (ahora está en la primera posición de la primera línea).Segundo paso : sigues adelante
X
, te empuja a la línea inferior y luego te empuja hacia adelante. Ahora reside en la tercera posición de la segunda línea (asterisco), sin haber visitado nunca la segunda posición (que contiene1
).3er paso : avanzas, saliendo de la cuerda.
Salida :
3
.
Casos de prueba:
Entrada:
*1* xxx
Salida:
3
. (porque1
te hace saltar en la tercera posición). Allí nunca visita la segunda línea, pero se requiere parte de la entrada.Entrada:
*X*1*x x*1xx*
Salida:
4
.Entrada:
1x1x ***X
Salida:
3
.Entrada:
1*x1xxx1*x x*x1*11X1x
Salida:
6
.Entrada:
xXXXxxx111* **xxx11*xxx
Salida:
6
.
fuente
"\n\n"
es una línea de dos cuerdas ...1
, cuando comienzas antes de la primera línea, luego avanzas un paso y luego terminas el laberinto ...Respuestas:
Caracoles, 34 bytes
Expandido:
Para una ruta que toma N pasos, el programa encuentra una coincidencia exitosa para cada recorrido de 0 pasos, 1 pasos, ..., N - 1 pasos.
fuente
Haskell,
686665 bytesLa función
#
toma ambas líneas como parámetros separados. Ejemplo de uso:"1x1x" # "***X"
->3
.Solo tenemos que contar las estrellas
*
que pisamos más 1 para irnos.Editar: @feersum guardó un byte. ¡Gracias!
fuente
a>'a'
lugar dea=='x'
?JavaScript (ES6), 119
Menos golf
Prueba
fuente
TSQL (sqlserver 2012+), 276 bytes
Golfizado:
Sin golf:
Violín
fuente
JavaScript, 211 bytes
Estoy pensando en hacer una versión que muestre cada paso jugado uno tras otro, que se muestre en una página web.
Se utiliza más bytes de lo que esperaba a la hora de sustituir
x
a*
causa de JS inmutableStrings
. Se agradecen las sugerencias para mejorar, especialmente con la pieza de repuesto.fuente