Este es un "laberinto de flechas":
v <
> v
> ^
> v
^ < *
El *
marca el lugar donde terminarás. Su objetivo es encontrar dónde comienza el laberinto (por lo tanto, laberinto inverso). En este caso, es el primero >
en la segunda línea.
v------<
S-+---v |
| >--^
>-+-------v
^ < *
Tenga en cuenta que se deben usar todas las flechas. También tenga en cuenta que puede suponer que las líneas se rellenarán con espacios de igual longitud.
Su programa debe ingresar el laberinto de cualquier manera razonable (stdin, desde un archivo, cuadro de mensaje, etc.), sin embargo, el laberinto debe estar completamente intacto. Por ejemplo, no puede ingresar las líneas separadas por comas; La entrada debe ser exactamente el laberinto.
Debe generar el inicio del laberinto de cualquier manera razonable. Por ejemplo, podrías
- dar salida a las coordenadas del inicio
- muestra todo el laberinto con la flecha de inicio reemplazada por
S
- muestra todo el laberinto con todas las flechas excepto la flecha de inicio eliminada (¡espacios en blanco intactos!)
- etc.
Siempre que pueda saber por su salida qué flecha es la flecha de inicio, entonces está bien. Por ejemplo, una salida de
"0"
"2"
está bien, independientemente de las nuevas líneas y comillas, porque todavía se puede saber dónde fue el comienzo.
Este es el código de golf , por lo que ganará el código más corto en bytes.
>v^
el>
está apuntando alv
, no al^
. Editaré más cosas cuando regrese a casa con una computadora hoy.Respuestas:
GolfScript, 55 bytes
Demostración en línea
Asume que todas las líneas de entrada están rellenadas con espacios de la misma longitud y separadas por líneas nuevas. Emite el desplazamiento de bytes de la flecha de inicio desde el inicio de la cadena de entrada (por ejemplo,
12
para el laberinto de ejemplo en el desafío).Específicamente, este programa encuentra los desplazamientos de bytes de todas las flechas que no tienen ninguna otra flecha apuntando hacia ellos (suponiendo que todas las flechas apuntan a una flecha o un objetivo; puede ocurrir un comportamiento extraño si esto no es cierto). Por defecto, si hay varias flechas de este tipo (que, por especificación, no deberían ser posibles en una entrada válida), sus desplazamientos simplemente se concatenarán en la salida. Si lo desea, puede agregar
n*
al programa para separarlos por nuevas líneas.Versión de golf con comentarios:
fuente
w
.z
a&
embargo, evitar necesitar un espacio adicional. OTOH,?~.~)
hace una bonita carita sonriente. :-)GolfScript (
101100 bytes)La salida tiene la forma
[[x y]]
en que las coordenadas están basadas en 0.Demostración en línea
El procesamiento se realiza en dos fases: la primera fase convierte el laberinto en una serie de
[x y dx dy]
tuplas; la segunda fase asigna cada flecha / asterisco a la flecha / asterisco al que apunta. (Se considera que los asteriscos apuntan a sí mismos). Según la definición del problema, hay exactamente una flecha que no está en el resultado de este mapa, y esa es la solución.fuente
;'STUFF'
simula el suministro aSTUFF
través de stdin.Mathematica
491323Ungolfed con comentarios
El procedimiento comienza desde el final ("*"), encuentra la flecha que lo señala, y así sucesivamente hasta llegar al inicio.
La función, f [laberinto].
precursor [{Flatten [{aboveMe [loc, a], belowMe [loc, a], rightOfMe [loc, a], leftOfMe [loc, a]}, 2], a, Prepend [list, loc]}]]
Golfed
Ejemplo
El laberinto. Cada par ordenado contiene la fila y la columna de una celda. Por ejemplo, {2, 3} denota la celda en la fila 2, columna 3.
Entrada
Salida : la ruta de principio a fin.
fuente
Creo que encontré una buena manera de resolver esto, pero resultó ser un asco jugar al golf. Supongo que esto podría ser MUCHO más corto, así que voy a explicar mi idea para que otros puedan usarla si les parece bien.
Si se debe usar cada flecha, todas las flechas serán apuntadas por otra flecha, excepto una, esa es nuestra solución.
Esto significa que en realidad no tenemos que jugar el laberinto hacia atrás, pero, comenzando por el superior izquierdo, solo tenemos que verificar la flecha apuntable más cercana para cada uno. Este es un verdadero protector del dolor para laberintos más grandes (ya que no tiene que verificar las cuatro direcciones, sino solo una).
Aquí está mi solución:
PHP, 622 bytes
Sin golf:
fuente
PHP - 492 bytes
Esta solución supone que el mapa se puede encontrar en la variable local
$m
. El método más corto que tengo para pasar es a través de$_GET
:$m=$_GET['m'];
a 14 bytes. A continuación se proporciona una versión sin golf con mapa en variable para mayor claridad de lectura.fuente
K,
281277258Aquí hay una versión anterior, sin golf
Devuelve el punto de partida como
x y
con índices basados en 0.fuente
Python 422
La entrada está en un archivo llamado
m.txt
. La salida es(x, y)
pero si cambia la última declaración de impresión aprint g
, la salida será una lista como[(x, y), (x, y), ...]
con todos los pasos para llegar desde el final hasta el comienzo.fuente