¿Dónde está apuntando la flecha?
En este desafío, su objetivo es seguir una flecha y mostrar el personaje al que apunta.
Ejemplos
Entrada:
d S------+ b
|
|
c +--->a
Salida: a
Entrada:
S-----+---a->c
|
V
b
Salida: b
La flecha no apunta c
porque está dividida por el a
, lo que significa que este camino nunca conduce a una punta de flecha.
Entrada:
a S s
| |
V V
b c
Salida: b
Entrada:
d s<+S+--V
||| Q
-++
Salida: Q
Este camino comienza en S
, baja, a la derecha, sube, a la derecha, luego apunta a la Q. Tenga en cuenta que el camino no va directamente de S
a +
.
Entrada:
d s-+ +-S +--+
+-->b | | |
| | +--+ |
+--+ A<----+
Salida: A
Entrada:
S-----+
| +-^
+---+->B
+---^
Salida: B
Porque la línea válida nunca conducirá a un carácter de espacio en blanco. La única línea que no conduce a un carácter de espacio en blanco conduce a unB
Reto
La entrada será una cadena de varias líneas en la que deberá encontrar el carácter al que apunta la flecha. Solo habrá una flecha válida. La flecha válida solo apuntará a caracteres alfanuméricos excluyendo S
. Una línea nunca se solapará. p.ej-|-
S
(capital) representa donde comienza la flecha.-
representa una línea horizontal+
representa un posible cambio en el eje. Una flecha válida nunca comenzará con a+
.|
representa una línea vertical> < V ^
cualquiera de estos representa la punta de flecha. Estos nunca se conectarán a a+
.
Solo habrá uno S
en la cadena. La entrada también se rellenará para ser un rectángulo (no necesariamente un cuadrado).
S
". Probablemente debería volver a redactarse como "Este nunca será el primer carácter de la flecha". (Porque elQ
ejemplo tiene un+
adyacente a unS
.) "+
Representa un cambio en el eje". mejor podría ser "+
representa un posible cambio en el eje". (Porque elB
ejemplo muestra que puede moverse a través de un+
sin cambiar de dirección). De lo contrario, un buen desafío. :)---^
? En otras palabras, si en el ejemplo B, ¿podría B permanecer en la primera fila?S>a
valido?Respuestas:
JavaScript (ES6), 195
245 231 242 246 250Edit4 Ahora, una sola función recursiva. Probablemente no se pueda jugar más al golf
Edit3 Prueba para línea recta y prueba para punta de flecha fusionada en función T, funciones S y H eliminadas.
Edit2 Revisado y más largo :( después de esto esta aclaración
Edite Pequeñas mejoras, cortando algunos caracteres aquí y allá, esperando que CJammers intervenga
Pruebe a ejecutar el fragmento a continuación en un navegador compatible con EcmaScript 6. (funciona en Firefox. A Chrome todavía le falta el operador de propagación
...
)fuente
JavaScript 2016,
264 263 249 240 235234 bytesEjecútalo en Firefox:
Esparcidos en algunas de mis notas:
fuente
o = 'indexOf'
y luego haciendoq[o](e)
cuando quiera usarlo.for(;;)
bucles suelen ser más eficientes. Podría estar equivocado en este caso, pero pruébelo.a<-+S->b
Creo que solo debería darb
, ya que una flecha válida nunca comenzará con un +JavaScript 2016
(todavía una respuesta válida y buena, no hay problema)VBA Excel 2007, 894 bytes
Bueno, esto comenzó mucho mejor que luego terminó. Tengo la sensación de que mi lógica es defectuosa y podría haber ahorrado una tonelada de bytes si reordenara parte de mi lógica, pero ya se ha invertido demasiado tiempo en esto = P
La entrada para esto es la Columna A de cualquier hoja en la que se encuentre. Este método utiliza el hecho de que Excel tiene esta cuadrícula agradable y desglosa todo para que pueda ver lo que está haciendo más claramente.
Sub m()
solo toma la Copia de datos pegados de la Columna A y Breaking it by char. Si permitimos una entrada modificada, si preformatea el laberinto en 1 carácter por celda, puede guardar algunos bytes al eliminarsub m()
Pegue un laberinto en Excel de cualquier tamaño hasta 99 filas por 27 caracteres de ancho. Si desea laberintos más grandes, solo tiene 2 bytes adicionales para aumentar el alcance a 999 filas y columnas ZZ
También podría necesitar una llamada de los jueces para determinar si una hoja de Excel es una "entrada estándar" válida para una respuesta de VBA. Si no, es prácticamente imposible dar VBA Entrada de líneas múltiples a través de la ventana Inmediato
Para ejecutar este código, simplemente pegue este código en un módulo de Excel, pegue un laberinto en A1 y ejecute
sub j()
fuente
Python 3, 349 bytes
Ugh, tantos bytes.
Esencialmente una búsqueda de amplitud. Bonificación: esto realmente sale con gracia en lugar de usar
exit()
, que de todos modos es más largo.fuente
input()
? Es problemático para mi.Perl 5
La solución resultó más larga que otras soluciones.
Incluso después de jugar al golf. Entonces esta es la versión sin golf.
Imprime el mapa para que pueda seguir el cursor.
¿Cómo funciona? En cada paso, pone posibles movimientos en la pila. Y sigue funcionando hasta que no queda nada en la pila, o se encuentra una solución.
Se puede modificar fácilmente para encontrar todas las soluciones y elegir la más cercana -> while (@_) {...
Prueba
fuente
Versión PHP (los comentarios son en francés, lo siento)
fuente
Haskell, 268 bytes
¡Felicitaciones a los Javascripters! Dio la recompensa, pero esto es lo que obtuve. May / Might podría no funcionar en todos los casos, pero en realidad maneja flechas que comienzan en y puntas de flecha que se conectan a
+
es, que yo sepa. Ni siquiera incluyó la búsqueda deS
, es solo(0,0)
por ahora.fuente
Me gustaría ver una versión APL en espíritu de https://www.youtube.com/watch?v=a9xAKttWgP4
Para empezar, una solución vectorizada de Julia que creo que se puede traducir 1: 0.3 a APL o J. Toma una cadena R que representa un diagrama de flechas L x K. Primero traduce la matriz de símbolos en una matriz de pequeñas matrices de 3x3 cuyos patrones son las expansiones binarias de las letras de la cadena "\ 0 \ x18 \ fH \ t]] \ x1cI". Por ejemplo, '+' se codifica como remodelar ([0, dígitos (int (']'), 2,8)], 3,3)
En esta representación, el camino consta de 2 y se inunda por 3 desde el punto de partida.
Probar,
Por cierto, creo que la cláusula "Otro + puede ser adyacente, pero la flecha debe priorizar ir a - o | primero". pone un enfoque vectorial en desventaja. De todos modos, simplemente lo ignoré.
fuente