Desafío
Le has dado un mapa a un amigo que se parece un poco a esto:
|
/
|
/
|
\
|
\
D
Un mapa simple que comienza en la parte superior y termina en la parte inferior. Lamentablemente, tu amigo no lo entiende. ¿Puedes decodificar el mapa para que pueda leerlo?
Entrada
La entrada es una cadena de caracteres que consisten en |
, /
, \
, D
, ^
, Y
, (espacio) , y saltos de línea.
|
le dice que se quede en la misma columna.\
le dice que se mueva a la columna a la derecha y hacia abajo 1./
le dice que se mueva a la columna a la izquierda y hacia abajo 1.D
marca el destino^
(si está presente) habla de una división en el camino.Y
(si está presente) habla de una unión de caminos. Trátelo como a|
.
La entrada se organizará de modo que haga una especie de camino:
|
|
\
|
^
/ \
/ |
D |
Siempre habrá un espacio entre dos rutas, y todas las rutas volverán a unirse o llegarán a la última línea de la entrada. Solo habrá una división por mapa. No hay límite para la longitud del mapa de entrada. Nunca habrá más de dos caminos.
Salida
La salida debe ser una cadena de direcciones.
- " L " debería decirle a tu amigo que mueva a la izquierda y dé un paso adelante.
- " R " debería decirle a tu amigo que se mueva a la derecha y dé un paso adelante.
- " F " debería decirle a tu amigo que avance 1 paso.
Para el mapa de ejemplo de entrada, la salida sería la siguiente:
F F L F R R R
Tenga en cuenta que su amigo comienza en la parte superior del mapa y mira hacia abajo. Da las instrucciones desde su perspectiva. Para una instancia de "^", su programa debe poder elegir la ruta que conduce al destino (D). Si las dos rutas se recombinan, su programa debe elegir la ruta más recta (la que tenga más |
s) a seguir. Direcciones deben estar separados por espacios, y deben terminar en D .
Ejemplos
Entrada
|
|
\
\
^
/ |
| |
\ |
\ \
\ \
\ /
Y
D
Salida
F F L L L F F F L L R F
Como la ruta más a la izquierda contiene solo 1 |
, utilizamos la ruta más a la derecha que tiene 3.
Entrada
\
|
/
|
\
|
/
D
Salida
L F R F L F R
Entrada
/
\
/
\
^
\ \
D \
Salida
R L R L R L
Otros detalles
- Este es el código de golf, por lo que la persona con el código más corto para el próximo miércoles 19 de agosto gana.
- Retroalimentación constructiva bienvenida y muy apreciada.
- Parcialmente inspirado en Un mapa del tesoro escondido
- Siéntase libre de cambiar el título a algo más creativo.
- Si encuentra errores que cometí, corríjalos.
- Y por supuesto, diviértete.
¡Gracias!
Tal vez un poco tarde, ¡pero UndefinedFunction es la codificación ganadora en JavaScript! Gracias a todos los que entraron. No se aceptarán otras entradas.
L L
, que creo que debería serL L L
. El ejemplo conY
todavía tiene un1
al final y también parece tener otros errores. Leo el mapa comoF F R R R F F F R R L F
si entendiera las reglas correctamente.L
para el^
y dosL
para los dos/
? ¿Y por qué agregaste dos másF
al final delY
ejemplo?Respuestas:
Javascript (ES6),
261248252248212 bytesComo solo se debe admitir una división:
Sin embargo, 240 bytes y podemos lidiar con múltiples divisiones:
Ambos programas definen funciones anónimas.
Para usar, asigne un nombre a las funciones agregando
f=
antes del código.Luego, pueden ser llamados con
Explicación
(desactualizado, pero sigue siendo el mismo concepto. Para la solución de división múltiple)
Notas
Todas las barras invertidas (
\
) en la entrada se escapan como\\
, de modo que JavaScript pueda reconocerlas.Ambas salidas contienen un espacio final.
fuente
PHP,
634631607396382381347338330337324 bytesMi primer golf, sé gentil. Cualquier consejo es muy apreciado.
Explicación breve:
Tengo un recuento que es 0 si la entrada tiene solo una ruta. Cuando la ruta se divide, el recuento es 1 para la ruta izquierda y 2 para la ruta derecha. Después de definir ambas rutas (o solo una), verifico qué ruta tiene más "F".
Versión sin golf:
Registro:
Guardado 36 Bytes gracias a Kamehameha.
Ahorró muchos bytes cambiando la lógica un poco.
Guardado 42 Bytes gracias a axiac.
Reemplazado cada declaración con operadores ternarios.
fuente
$a=$b='';
lugar de:$a='';$b='';
ahorra alrededor de 3 bytes.$a=$a.'L ';
se puede reducir a$a.='L '
. Parece que lo has hecho en un par de lugares. Eso ahorrará alrededor de 6 bytes :)foreach($e as$i)
); He probado eso y parece funcionar bien.as
en elforeach
, los espacios entreecho
y el nombre de la variable se pueden eliminar para que tengaecho$b
. Además, un par de tests de igualdad puede ser más corto también,$c==0
podría ser!$c
y si ese es el caso, se puede inicializar$c
a''
con$a
e$b
!PHP, 281 bytes
Es el resultado de dos iteraciones de golf. La versión sin golf es:
Es bastante golfista y surgió como una mejora del siguiente programa de golf (312 bytes):
Es la versión de golf del original:
Ejecución de ejemplo:
También maneja múltiples horquillas correctamente (es necesario unirse antes de la próxima bifurcación para tener como máximo dos ramas en cualquier momento). Pregunté por varios tenedores en un comentario, pero el código ya estaba listo cuando llegó la respuesta ("no es necesario").
El código completo con el conjunto de pruebas y más comentarios se pueden encontrar en github .
fuente