Introducción
¡Juguemos un poco de minigolf! La pelota de golf está representada por a .
y el hoyo por a O
. Desea obtener un hoyo en uno en cada hoyo, pero no es bueno para poner. De hecho, te niegas a intentar poner en diagonal. Solo arriba, abajo y a cada lado.
Planeas hacer trampa colocando parachoques adicionales \
y /
así puedes poner la pelota con un solo tiro. La pelota rebota en los parachoques en ángulo recto, como se muestra en esta imagen.
¡Recuerda llamar a tu tiro! Dinos en qué dirección estás yendo.
Agujeros
1: El primer hoyo es fácil, ¡un tiro recto! No se necesitan parachoques aquí.
Entrada:
. O
Salida:
right
. O
2: Otro básico, un turno corto. La pelota es golpeada desde el parachoques hacia el hoyo.
Entrada:
.
O
Salida:
left
/ .
O
o
down
.
O /
3: ¡ Algunos agujeros ya tienen parachoques!
Entrada:
. \O
Salida:
right
. \O
\/
o
right
/ \
. /\O
4: ¡ Algunos agujeros son demasiado complejos!
Entrada:
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
\ / /
/\ \//\ \ /
/ \ / \ \ \/
\ /\ \ / \ \
\/ \ \/ \ O/ \
/ \/
Salida: (una posible solución, más existe)
down
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
/ \ / /
/\ \//\ \ /
\/ \ / \ \ \/
\ /\ \ / \ / \
\/ \ \/ \ O/ \
/ \ \/
\ /
Reglas
- La entrada es el hoyo de mini golf
STDIN
. - La salida es la dirección en la que golpeas la pelota y el hoyo de mini golf con parachoques recién colocados
STDOUT
. - Los parachoques existentes no se pueden mover.
- Puede agregar cualquier cantidad de parachoques para resolver un agujero.
- Suponga que hay ubicaciones válidas para colocar los parachoques que permitirán que el curso se resuelva en un putt.
- El orificio de salida puede ser más grande que la entrada.
- La entrada puede rellenarse con espacios en blanco al final, pero especifique en su respuesta si hace esto.
- El resultado debe verse correcto, pero puede tener espacios en blanco iniciales o finales.
- Su programa debería funcionar para cualquier hoyo válido. ¡Siéntase libre de publicar sus casos de prueba también!
Puntuación
Este es el código de golf . Su puntaje es el número de caracteres en su programa. ¡La puntuación más baja gana!
right
, # 3 ejemplo 1 debería serdown
, y # 3 ejemplo 2 debería serup
. ¡Interesante desafío, sin embargo!.
es la pelota que estás golpeando yO
es el hoyo. Cometí un error en el # 1 ejemplo 1 pero ahora deberían estar bien.Respuestas:
Javascript (ES6) - 651 bytes
Crea una función
G
que acepta una cadena (campo de golf) como entrada y devuelve la solución de colocación solicitada. La cadena de entrada puede tener o no líneas iniciales, líneas finales y espacios en blanco finales. La salida no tendrá espacios en blanco iniciales o finales.El código expandido es:
El solucionador opera bajo la premisa de que cualquier camino desde la bola (hoyo)
Trazamos el camino de la pelota en las cuatro direcciones. Si encontramos el caso 3, el problema está resuelto. Si encontramos el caso 2, marcamos la ubicación de salida de la pelota. Si las cuatro direcciones resultan en el caso 1, convertimos el primer espacio que no es parachoques a lo largo de cualquier trayectoria en un parachoques (si el problema es solucionable, siempre se garantiza que dicho espacio exista) e intentamos nuevamente. El parachoques al que convertimos tendrá el mismo tipo que el último parachoques que encontró nuestra trayectoria *. Si la pelota todavía está atrapada en un bucle, repetimos el proceso tantas veces como sea necesario. Si el problema tiene solución, se garantiza que este procedimiento conducirá eventualmente al resultado 2 o 3.
(* Tenga en cuenta que si simplemente convertimos a un parachoques fijo [digamos,
\
], existen casos extremadamente artificiales pero posibles, sin embargo , donde existe una solución, pero no lo encontraremos).Realizamos una traza similar desde el agujero, que conduce al resultado 2 o al resultado 3.
Si tanto el trazado de la bola como el trazado del hoyo resultan en el resultado 2, colocamos topes en la periferia del recorrido que une los dos puntos de salida (de hecho, estos topes de la periferia se colocan independientemente de los resultados de la traza, para acortar el código). Esto completa la solución.
Casos de prueba y salidas
En
Fuera
En
Fuera
En
Fuera
fuente
"/\\/\\\n\\.//\n// \\\n\\/ \no \\/"