Si alguien que mira hacia el norte en el punto A en esta cuadrícula desea instrucciones para seguir el camino verde (ya que solo pueden seguir las líneas de cuadrícula) hasta el punto B, podría decirles:
Ir North, North, West, East, East, South, East, East
.
o equivalente
Ir Forward, Forward, Left, Back, Forward, Right, Left, Forward
.
(Donde un comando de Derecha , Izquierda o Atrás implícitamente significa girar en esa dirección, luego avanzar).
Escriba una función con un argumento que se traduzca entre estas direcciones absolutas y relativas a lo largo del mismo camino , no solo al mismo punto. Suponga que la persona dirigida siempre comienza a mirar hacia el norte.
Si el argumento es una cadena de letras NSEW
, devuelve las direcciones relativas equivalentes.
Por ejemplo, f("NNWEESEE")
devuelve la cadena FFLBFRLF
.
Si el argumento es una cadena de letras FBLR
, devuelve las direcciones absolutas equivalentes.
Por ejemplo, f("FFLBFRLF")
devuelve la cadena NNWEESEE
.
La cadena vacía se rinde. Suponga que no hay otros casos de entrada.
Si su idioma no tiene funciones o cadenas, use lo que le parezca más apropiado.
El código más corto en bytes gana.
R
igualE
al inicio.Respuestas:
CJam,
575349Versión previa
Ejemplo:
Salida:
Cómo funciona
fuente
C ++,
9997Lo siguiente está formateado como una expresión lambda. Toma un
char*
argumento y lo sobrescribe.Para aquellos que no están familiarizados con esta función (como yo hace 1 hora), úsela de la siguiente manera:
Algunas explicaciones:
flag ? (x = y) : (x += z)
, el segundo par de paréntesis se requiere en C. ¡Así que usé C ++!*s*9%37&4
prueba el primer byte; el resultado es 4 si es uno deNESW
; 0 de lo contrario*s%11/3
convierte los bytesNESW
a 0, 1, 2, 3.*s%73%10
convierte los bytesFRBL
a 0, 9, 6, 3 (que es 0, 1, 2, 3 módulo 4)d
variable. Intenté reorganizar el código para eliminarlo por completo, pero parece imposible ...fuente
JavaScript (E6) 84
86 88 92104Editar: usando & en lugar de%, diferente prioridad del operador (menos paréntesis) y funciona mejor con números negativos
Edit2: | en lugar de +, op precedence nuevamente, -2. Gracias DocMax
Edit3: la comprensión de la matriz es 2 caracteres más corta que map (), para cadenas
Prueba en la consola FireFox / FireBug
Salida
fuente
&& o
al final?array && value
evaluarvalue
como cualquier matriz evaluartruthy
4+(n-d&3)
con4|n-d&3
y guardar 2 caracteres.APL, 72
Si las configuraciones del intérprete se pueden cambiar sin penalización, la puntuación es 66 , cambiando
⎕IO
a0
:fuente
Pitón,
171139No es tan corto como las otras soluciones, pero supongo que debería ser relativamente bueno para lo que se puede hacer con Python:
Versión ampliada para una legibilidad ligeramente mejor:
fuente
Go, 201
Versión legible:
fuente
GNU sed, 356 bytes
El desafío requiere una transformación simple en una secuencia de personajes.
sed
, el editor de flujo es la elección obvia de idioma ;-)(Comentarios y espacios despojados para el cálculo del puntaje de golf)
Salida:
Explicación:
La idea aquí es que cuando cambiamos el marco de referencia, siempre hay un mapeo directo entre
{N, E, S, W}
y{F, R, B, L}
.En el caso de absoluto a relativo, trabajamos hacia adelante a través de la cadena. Para cada carácter hacemos un mapa
{N, E, S, W}
para{F, R, B, L}
, a continuación, girar los restantes[NESW]
caracteres de acuerdo con el carácter que acaba de mapeado, a continuación, pasar a la siguiente carácter.Para el caso de relativo a absoluto, hacemos lo contrario. Trabajamos hacia atrás a través de la cadena, girando todos los
[NESW]
caracteres siguientes de acuerdo con el carácter que está inmediatamente delante. Luego asignamos ese carácter{N, E, S, W}
a{F, R, B, L}
, hasta llegar al comienzo de la cadena.fuente
Haskell, 224
Esto asigna números de rotación a las direcciones relativas, y números de orientación a las direcciones absolutas, luego encuentra las rotaciones entre orientaciones sucesivas o las orientaciones después de rotaciones sucesivas. La
i
función encuentra el índice dentro de las dos leyendas.fuente