Las serpientes se ven así:
>>>v
@ ^ v
^ >>>^ v
^ v
^<<<<<<<<<
La serpiente puede cruzarse sobre sí misma como en este caso:
@
^
>^>v
^<<
Para que un crossover sea válido, los caracteres de cada lado deben moverse en la misma dirección. El caso de
@
>^v
^<
puede considerarse poco claro e inválido.
La salida es una cadena de WASD
representación que va desde la cabeza hasta la cola ( @
).
Dada una serpiente que no retrocede y no es ambigua, ¿puede escribir un programa que genere la secuencia de movimientos que realiza la serpiente?
Este es el código de golf, por lo que gana la respuesta más corta.
Casos de prueba:
(Nota: @
se puede reemplazar con cualquier carácter que no esté en v^<>
)
Entrada:
>>>>v
v
v<< @
v ^
>>>>>^
Salida: ddddssaassdddddww
Entrada:
@>>v
^ v
^ v
^<<<
Salida: dddsssaaawww
Entrada:
>>>v
v @
v ^
>>>>v ^
>>>>^
Salida: dddsssddddsddddwww
Entrada:
@<< v
^ v
v<^<<
v ^
>>^
Salida: ssaaaassddwwwwaa
Entrada:
@v<v
^v^v
^v^<
^<
Salida: ssawwasssawww
Respuestas:
Java,
626539536529 bytes-87 bytes al guardar algunos en muchos lugares. Gracias al Sr. Public por señalar algo.
-3 bytes porque no puedo eliminar todos los espacios primero (gracias mbomb007)
+8 bytes para solucionar este caso:
-15 bytes por declaración de variable de carga frontal
Versión legible:
Toma una cuerda como
v @\n>>>^
. Crea una ruta que comienza en cada coordenada, luego devuelve la más larga. La anticipación requerida para los caminos superpuestos fue la parte más difícil.fuente
Rubí, 217
Esto comienza en el
@
y camina hacia atrás, buscando vecinos que apunten a la posición actual (z
). Para elegir el camino correcto en las intersecciones de 4 vías, favorece a los vecinos que apuntan en la misma dirección (max_by{...}
). Si no se encuentran vecinos inmediatos, se supone que debe haber habido un cruce y alcanza un nivel a la vez hasta que encuentre uno (until n
yc+=1
). Este proceso se repite para la cantidad de segmentos del cuerpo (sin incluir la cabeza) (.scan(/\w/){...}
).El caso de prueba que agregué al acertijo me hizo tropezar, así que pasé de 182 caracteres a 218. Esos personajes adicionales se aseguraban de que mis movimientos horizontales no entraran en las líneas siguiente / anterior. Me pregunto si puedo lidiar con eso de una mejor manera.
Sin golf:
fuente