Los lenguajes de programación bidimensionales a menudo tienen comandos espejo como /
y \
para redirigir el puntero de instrucciones en la cuadrícula:
>>>>\
v
v
<<<</
En este desafío, se le da una dirección entrante y un espejo y necesita determinar la dirección saliente.
Reglas
La dirección entrante se dará como uno de los personajes NESW
y el espejo se dará como /
o \
. Puede recibirlos en cualquier orden. Debes usar letras mayúsculas.
Puede tomar la entrada en cualquier formato conveniente, incluida una cadena de dos caracteres, una cadena que use un separador entre los caracteres, un par de caracteres en una lista o incluso un par de cadenas de un solo tono. Si usa una cadena con separador, el separador no puede usar ninguno de los caracteres NWSE\/
.
La salida debe ser un carácter de NESW
una cadena de un solo carácter.
Puede escribir un programa o una función y utilizar cualquiera de nuestros métodos estándar para recibir entradas y proporcionar salidas.
Puede usar cualquier lenguaje de programación , pero tenga en cuenta que estas lagunas están prohibidas por defecto.
Este es el código de golf , por lo que gana la respuesta válida más corta, medida en bytes .
Casos de prueba
Solo hay 8 posibles entradas que necesita manejar, por lo que no hay excusa para no probar su código en todas ellas:
N / --> W
N \ --> E
E / --> S
E \ --> N
S / --> E
S \ --> W
W / --> N
W \ --> S
fuente
\
. Si su respuesta es una presentación de función que toma una cadena, entonces, por supuesto, necesitará\\
en el código fuente para llamarla correctamente, pero si está leyendo su entrada desde la entrada estándar, por ejemplo, entonces debería ser una sola\
. En otras palabras, si llama a la función de longitud de cadena respectiva de su idioma en la entrada, el resultado siempre debe ser el mismo, independientemente de si la entrada contiene/
o no\
.readline()
puedo manejarlo.Respuestas:
Python,
4038 bytes-2 bytes gracias a @MitchSchwartz
(ord(d)+ord(m))%8
->ord(d)+ord(m)&7
búsqueda simple de respuesta en una lista (cadena AKA) indexada por el mod más pequeño de la suma de ordinales que funciona.
Los casos de prueba están en ideona
fuente
%8
y haciendo un índice. Entonces veo que publicaste la misma solución hace más de una hora. Ja Tener un +1.Python 2, 40 bytes
Sp3000 guardó un byte (
.index
→.find
).Explicación
Queremos mapear las direcciones así:
Podemos asignar códigos de 2 bits a las direcciones y ver ambos cambios como XOR al primer y segundo bits:
La asignación entre cadenas de bits y direcciones se realiza utilizando la cadena
k
. Ahora solo necesitamos mapear los caracteres espejo'/'
y'\\'
los valores1
y2
. Desde entonces'/' < '\\'
, podríamos usar ingenuamente(m>'/')+1
como una fórmula. ¡Pero espera! Lexicográficamentey hemos
'NWES'
asignado muy bienk
! Entonces podemos usar(m>k)+1
en su lugar.fuente
CJam, 14 bytes
(@MartinEnder portó mi respuesta de Python )
¿Cómo?
Las pruebas están en aditsu
fuente
Javascript (ES6),
50414037 bytesAhorré 3 bytes más al usar la comparación, gracias a la respuesta de Lynn
Uso
fuente
MATL ,
1917 bytesPruébalo en línea! O verificar los ocho casos .
Explicación
fuente
Pyth,
171615 bytesGracias a @Jakube y @Maltysen por -1 byte cada uno
Un programa que toma la entrada de dos cadenas entre comillas separadas por una nueva línea, primero la dirección y luego el espejo, e imprime el resultado.
Este es un puerto de la respuesta Python de @ Lynn .
Pruébalo en línea
Cómo funciona
fuente
<QE
con>E
.05AB1E , 14 bytes
Pruébalo en línea!
fuente
Jalea ,
14 1312 bytes(un puerto de mi respuesta de Python )
-1 byte gracias a @MartinEnder (agregue un espacio al final de la cadena y elimine la necesidad del módulo 8)
-1 byte gracias a @LuisMendo (tome un solo argumento de cadena en lugar de dos)
¿Cómo?
Pruébelo en TryItOnline
fuente
Java 7,
717068 bytesLástima que
charAt
yindexOf
ocupa tantos bytes ...Sin golf y todos los casos de prueba:
Pruébalo aquí
Salida:
fuente
Python,
636159 bytesBastante simple. Definitivamente se puede jugar más al golf. Decide si agregar 1 o -1 al índice de entrada en
'NESW'
.Esta es una expresión lambda; para usarlo, prefijalo con
f=
.Ideone it!
fuente
Java 8,
625856 bytesPrograma de prueba sin golf
fuente
PowerShell v2 +, 34 bytes
Toma la entrada como dos
char
s explícitos , emite achar
.Esto funciona de la siguiente manera: Si la salida de clase, queremos
S
/
a la igualdad de alguna manera lo mismo queN
\
,W
/
al igualE
\
, etc, o, al menos, los números producen que son "lo suficientemente cerca" y aún así distinta. Si observamos los valores ASCII, obtenemos una tabla como la siguiente:Ejecutar un forzador de fuerza bruta rápido en la columna de sumas (derivado de sumar los puntos de código ASCII de las entradas) muestra que si tomamos el módulo de sumas
8
, obtenemos lo siguiente2 2 | 6 1 | 3 4 | 5 7
. Eso se evidencia en la cadena"xNESSWNW"
, comoE
está en el índice2
,N
está en6
y1
, y así sucesivamente.Por lo tanto, sólo tenemos que sumar las entradas (fundición implícitamente
char
aint32
lo largo del camino), que llevará%8
, y el uso que para indexar en nuestra cadena.Casos de prueba
fuente
Lote, 111 bytes
Acepta, por ejemplo,
W/
como un parámetro de línea de comando de cadena de dos caracteres. El\
y/
hacer bucle torpe; habría tomado 124 bytes.fuente
\r
?Octava, 30 bytes
Usó el mismo orden de argumentos que Jonathan Allan.
Toma la entrada como una cadena de dos caracteres
'W\'
.Pruébalo en línea .
fuente
'NESSWNW 'is)
(ver todos los casos de prueba ).i
esinput
,s
essum
y)
está indexando, que es modular. Agregué un espacio en la cadena para que el módulo sea 8C,
44,35,34 bytesRequiere dos caracteres como dos variables. Se necesita tanto mayúsculas como minúsculas. Utiliza mucha manipulación de bits. El fragmento
a&a/2
da como resultado un valor que tiene valores únicos para los dos bits inferiores,&3
corta todos los bits superiores. Esto se utiliza como un índice en la cadena "NWES" para el\
espejo. Por suerte, los dos bits más bajos de los caracteres ASCII\
y/
son 00 y 11 respectivamente, lo cual es perfecto para XOR con el índice antes mencionado para obtener la dirección correcta para el/
espejo.fuente
return"NWES"[...]
(omita el espacio).CJam , 17 bytes
La entrada está separada por espacios.
Pruébalo en línea! (Como un conjunto de pruebas separado por salto de línea).
Esta es la solución que encontré antes de publicar el desafío. No es tan corto como la indexación cíclica de Jonathan, pero pensé que este enfoque es bastante interesante (y novedoso).
Explicación
El objetivo es utilizar la transliteración (es decir, el uso de un mapeo de caracteres a caracteres) para reemplazar el carácter de entrada con el carácter de salida. Para hacer esto, debemos seleccionar el mapa correcto en función de si el espejo es
/
o\
. Asignaremos de laSWEN
lista a otra que seleccionaremos condicionalmente. Si la lista de entrada esSWEN
, los dos mapas de salida deben ser los siguientes:Tenga en cuenta que estos están en orden ordenado y en orden inverso (es por eso que elegimos el
SWEN
orden aparentemente aleatorio como el conjunto de entrada). Podríamos generarlos al ordenar la lista de entrada y revertir el resultado si la entrada tiene\
, pero hay una mejor manera:fuente
SED
48(42 + 1 para -r) 43Guardado 5 gracias a Martin Ender ♦
Toma la entrada como una cadena de dos caracteres.
fuente
Mathematica, 98 bytes
Función anónima. Toma dos cadenas como entrada y devuelve una cadena como salida.
fuente
C, 81 bytes
Uso
Salida:
fuente
Pyth, 13 bytes
Banco de pruebas
Suma los puntos de código, índice modular, cadena comprimida.
fuente
TI-Basic, 40 bytes
Codifica las entradas. Aburrido, pero el camino más corto.
fuente