El reto
Dada una cuadrícula rectangular de caracteres
A B C D E FGHIJ KLMNO PQRST
y una cuadrícula con las mismas dimensiones de puntos y espacios
. . . . . . . . . . .
Salida de la cadena que se genera siguiendo los puntos a través de la cuadrícula que comienza en la esquina superior izquierda. Este ejemplo produciríaABGLQRSNIJE
Notas
- Puede tomar las cuadrículas de entrada como matrices 2D o la alternativa más cercana en su idioma en lugar de una cadena multilínea.
- Puede usar el valor NULL de su idioma en lugar de espacios. Pero tienes que usar puntos para marcar el camino.
- No necesita separar puntos en la misma línea con espacios. Acabo de agregarlos para facilitar la lectura.
- La cuadrícula más pequeña posible tiene el tamaño 1x1.
- El punto inicial y final tendrá un solo vecino. Los puntos entre ellos siempre tendrán dos vecinos verticales u horizontales exactos. Esto garantiza que el camino sea inequívoco.
- El camino no irá en diagonal.
- Los caracteres en la cuadrícula serán todos los caracteres en mayúsculas o minúsculas en el rango que
[a-z]
sea más conveniente para usted. - La ruta siempre comenzará en la esquina superior izquierda.
Reglas
- Función o programa completo permitido.
- Reglas predeterminadas para entrada / salida.
- Se aplican lagunas estándar .
- Este es el código de golf , por lo que gana el conteo de bytes más bajo. Tiebreaker es una presentación anterior.
Casos de prueba
Rejilla # 1
ABCABCW DEFGHUQ XLUSDQZ ASUKWXI WUKOAIM AIAIOUP
. . . . . . . . . . . . => ABEFGSKUSAWA
. . . . . . . . . . . . . . . . . . . . . . . . . => ABCABCWQZIMPUOIAIAWAXLUUK
Cuadrícula 2
Tenga en cuenta los espacios triples en las segundas líneas del primer y segundo ejemplo.
AB discos compactos
. => A
. . => AB
. . . => ACD
Rejilla # 3
UNA
. => A
¡Feliz codificación!
ABCABCUQXIUOIAIAWAXLUUK
.Respuestas:
APL, 63 bytes
Esta es una función que toma dos matrices de caracteres (deben ser matrices), la cuadrícula de caracteres como argumento izquierdo y la cuadrícula de puntos como argumento derecho. La matriz de puntos puede ser más pequeña que la matriz de caracteres.
Explicación:
(,⍵='.')/,⍳⍴⍵
: obtener las posiciones de los puntos, en orden fila-columna1↓
: suelte el primero (se sabe que está en1 1
)(⊂1 1){
...}
: a partir de1 1
, ejecute la siguiente función, que sigue la ruta (su argumento izquierdo es su posición actual, su argumento derecho son posiciones no visitadas). Funciona seleccionando el punto no visitado más cercano cada vez. (Si se cumplen los supuestos de la pregunta, esto es correcto).×≢⍵:
: si todavía hay puestos no visitados:+/¨2*⍨⍺-⍵
: encuentre la distancia de Manhattan entre cada posición y la posición actualV←(+=⌊/)
: para cada posición, vea si su distancia es igual a la distancia más pequeña y guárdela enV
.⍵/⍨~
: seleccione todas las posiciones para las que este no es el caso, estos son los campos para visitar a continuación(V/⍵)
: encuentre la posición para la cual es el caso, este será el siguiente campo∇
: vuelva a ejecutar la función con estos nuevos argumentos⍺,
: el resultado es la posición actual, seguido del resultado de hacer esto para el resto de la lista⋄⍺
: de lo contrario, simplemente devuelva la posición actual y pare (es la última)⍺[
...]
: para cada posición, seleccione el elemento correspondiente en la cuadrícula de caracteres.Casos de prueba:
fuente
JavaScript (ES6), 122 bytes
Explicación
Toma las cuadrículas como cuerdas multilínea.
Se siente como un intento decente, pero se me acabó el tiempo jugando al golf, por lo que probablemente podría mejorarse.
fuente
APL (Dyalog Classic) , 43 bytes
Pruébalo en línea!
fuente