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.

RigualEal 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&4prueba el primer byte; el resultado es 4 si es uno deNESW; 0 de lo contrario*s%11/3convierte los bytesNESWa 0, 1, 2, 3.*s%73%10convierte los bytesFRBLa 0, 9, 6, 3 (que es 0, 1, 2, 3 módulo 4)dvariable. 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
&& oal final?array && valueevaluarvaluecomo cualquier matriz evaluartruthy4+(n-d&3)con4|n-d&3y guardar 2 caracteres.APL, 72
Si las configuraciones del intérprete se pueden cambiar sin penalización, la puntuación es 66 , cambiando
⎕IOa0: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
ifunción encuentra el índice dentro de las dos leyendas.fuente