Jalea , 37 34 bytes
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Pruébalo en línea!
Toma entrada en minúsculas.
-2 gracias a Jonathan Allan .
-1 ya que resulta que esto es válido como una función :)
Gracias a Jonathan Allan (y Dennis), ahora puedes eliminar el €
. Desafortunadamente, eso sería no competir aquí.
Explicación detallada del algoritmo :
Por lo general, comenzamos a explicar desde el enlace inferior (principal), bajando, pero aquí siento que es más apropiado explicar desde arriba.
Primero, simplemente cargamos la lista [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Esto parece números aleatorios, ¿eh? Bueno, esta es en realidad una lista de números comprimidos en base 5, por lo que lo descomprimimos en base 5. Ahora parece [[1], [1, 1, 2], [1, 2], [2, 1, 2], [2], [2, 3, 2], [3, 2], [3, 3, 2], [3], [3, 3, 4], [3, 4], [4, 3, 4], [4], [4, 1, 4], [1, 4], [1, 1, 4]]
. Todavía tiene un aspecto aleatorio, pero en realidad es una NESW
lista mapeada de las dieciséis coordenadas, por lo que no estamos lejos de completar la lista (Jelly está indexada en 1). Al hacer el mapeo final, obtenemos [['N'], ['N', 'N', 'E'], ['N', 'E'], ['E', 'N', 'E'], ['E'], ['E', 'S', 'E'], ['S', 'E'], ['S', 'S', 'E'], ['S'], ['S', 'S', 'W'], ['S', 'W'], ['W', 'S', 'W'], ['W'], ['W', 'N', 'W'], ['N', 'W'], ['N', 'N', 'W']]
, que es la lista completa que queremos (las cadenas Jelly están en el formulario [char1, char2, char3, ...]
).
Como ahora hemos creado la lista de coordenadas, trabajamos con ella. El enlace principal entra en juego. Primero, cargamos la lista que hemos construido, y luego tomamos el índice en el que reside la coordenada de entrada (como argumento de línea de comando). Luego, emparejamos su predecesor y su sucesor en una lista, y los usamos como modulares índices en la misma lista de coordenadas para tomar la coordenada a la izquierda y derecha de la entrada respectivamente. Ahora pensarías que finalmente hemos terminado, pero de hecho hay una cosa más, el separador. Esto es válido como función, ya que 1) Puede llamarlo usando <integer>Ŀ
2) También puede definir otras funciones (como importar módulos). Ahora hemos terminado. Como programa completo, esto no tiene un separador, pero está bien, ya que funciona como una función.
Explicación del código de enlace por enlace :
¢iµ’,‘ị¢K Main link. Arguments: z = cmd0
¢ Run the helper link niladically (i.e. load the coordinate list).
i Find the index of z in the list.
µ Start a new monadic chain. Arguments: z = list_index.
’ Decrement z.
‘ Increment z.
, Pair x and y into [x, y].
¢ Run the helper link niladically.
ị Take the elements of y at the indices in x.
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦» Helper link. Arguments: [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
“¢ ¬9£Hæz¥{çb¤S®!‘ Generate the integer list (the argument).
“¡&¦» Literal "newsy".
ṃ€ Base-length(y)-decompress every integer in x, then index into y.
Mathematica,
118112 bytes¡Gracias a Martin Ender por guardar 6 bytes!
Función sin nombre (una asociación, realmente) que toma una cadena como entrada y devuelve un par ordenado de cadenas. Básicamente, solo codifica la respuesta.
fuente
Python 2,
116115103 bytes-12 bytes gracias a Neil
Pruébalo en línea!
fuente
d[n-15]
para evitar la condición.JavaScript ES6,
106102 bytesPruébalo en línea!
fuente
let
lugar deconst
.05AB1E ,
4443 bytes (Gracias a Adnan)Pruébalo en línea!
Salida de ejemplo:
Versión que empuja en su
N0NNE0NE0ENE0E0ESE0SE0SSE0S0SSW0SW0WSW0W0WNW0NW0NNW
lugar:También es de 44 bytes, había 0 razones para mi refactor y hay 0 razones para dividir en los 4.
fuente
4
s?•17¿$Mn]6VAÆ—Dªd—•5B4LJ"NSWE"‡0¡©skD<®ès>®è)
resulta que, no, no hay ninguna razón en absoluto. Usar 0 como delimitador es la misma relación de compresión, ya que no reduce la longitud del número en la conversión de base 5 a base-214. Sin embargo, Coulda juró que hacerlo así me salvó un byte.„ €Ã¦•174SÝ©l2ÎG¦˜fÐ98•5BSè#ÐIk©<ès®>è)
para guardar 4 bytes.Javascript -
234154156152120106102 bytes¡Solo mi segunda vez haciendo código golf!
Última revisión:
¡Gracias a @ fəˈnɛtɪk por este ingenioso truco variable!
Antes de eso: Ok, última revisión: la entrada es una cadena y la salida es una cadena que está en las reglas, por lo que la convertí en una función, y con las reducciones me he vuelto aún más pequeña (también la función es anónima, lo que ahora significa que la mía tiene de alguna manera se mezcló con las otras respuestas js ¡Uy! ¡Él (powelles) lo tuvo primero!):
Puede ser utilizado por:
Rehecho (no funciona) con Salida - 120:
Tenga en cuenta que originalmente cometí un error, que tiene una longitud igual a. Gracias @Neil por señalar que no funcionó para NNW.
Nota 2: ¡Gracias a @Neil y @ETHProductions por ayudarme a acortar el código!
Original:
fuente
NNW
.,
, i = a.indexOf (p), [a [i-1 & 15], a [i + 1 & 15]])Lote, 196 bytes.
Recorre cada par de puntos de la brújula, imprimiendo uno cuando el otro coincide. Por ejemplo, para un parámetro de
ENE
, cuando el bucle alcanzaENE
, la variables
contiene loNE
que se imprime, luego, cuando el bucle avanzaE
, la variables
contieneENE
y asíE
se imprime. Luego, un par debe tener una carcasa especial para evitar que los puntos de la brújula se impriman en el orden incorrecto.fuente
Jalea ,
4038 bytesPruébalo en línea! (se agregó el pie de página para mostrar que la salida es una lista de dos elementos) ... o ver todos los casos .
(No estoy muy seguro de por qué
1323DRẋ4
en lugar de“¢)`)’ḃ3R
no funciona en este momento).¿Cómo?
fuente
Haskell ,
10099 bytesPruébalo en línea! Llamadas
(s#) "N"
devueltas("NNW","NNE")
.s
es una repetición infinita de la lista de direcciones, por lo tanto, no tenemos que agregar un extraN
y dar meNNE
gusta a algunas de las otras respuestas para manejar correctamente los bordes de la lista.¡Gracias a @nimi por guardar un byte!
fuente
(a:b:c:r)!x| ... =r!x;(s!)
.SOGL , 33 bytes
La primera parte
≠┐πΜ]ρ½d⁹V¹-┐*╔╤¹Ψæ;¶‘
es una cadena comprimida que escomprimido con un diccionario personalizado con
ENSW
El resto del programa:
fuente
bytes
en el título tiene un enlace a la página de códigosPHP, 122 bytes
fuente
$argv[1]
con$argn
y usando la opción -R. si usa funciones obsoletas si podría terminar enereg("([^_]+)_{$argn}(_[^_]+)",N_NNE_NE_ENE_E_ESE_SE_SSE_S_SSW_SW_WSW_W_WNW_NW_NNW_N_NNE,$t);echo$t[1].$t[2];
Rubí: 94 bytes
Un riff en la respuesta de Blue Okiris , solo para aprovechar una buena taquigrafía de Ruby (la
%w[]
sintaxis yp
específicamente):fuente
Japt ,
6652 bytesAhorró 14 bytes gracias a @ETHproductions
Pruébalo en línea!
Explicación:
fuente
'
enq'o
y funcionará exactamente el mismo :-)[J1]£VgX+VaU
para ahorrar algunos bytesCJam, 41
Pruébalo en línea
fuente
PHP, 115 bytes
-2 bytes que usan la función obsoleta
split
lugar deexplode
PHP, 128 bytes
PHP, 134 bytes
fuente
PHP,
110109 bytesGuardado 1 byte gracias a Jörg Hülsermann .
fuente
preg_replace
conpreg_filter
para guardar 1 bytePython 3 -
112107 bytesBasé esto en mi respuesta de Javascript:
Rehecho:
Usar como decir
Original:
fuente
MATL , 43 bytes
Pruébalo en línea!
Explicación
fuente
c,
222216211 bytesPruébalo en línea
fuente
Javascript (ES6), 189 bytes
Simplemente toma la entrada, la busca y la devuelve.
fuente
JavaScript (ES6), 94 bytes
Espera una cadena en mayúsculas como
"ENE"
. Devuelve una cadena separada por comas como"NE,E"
.Cómo funciona
La expresión
0+s+0
se convierte en una cadena cuandosplit()
se llama. Por ejemplo, si la entrada es"ENE"
, la cadena se dividirá en"0ENE0"
:Esto lleva a la siguiente matriz:
Nuevamente, esta matriz se coacciona a una cadena cuando
exec()
se llama. Entonces, la expresión regular se aplica realmente a:Buscamos caracteres no numéricos consecutivos (
\D+
) seguidos de una coma, seguidos de caracteres no numéricos consecutivos. Esto devuelve la matriz[ "NE,E" ]
. Podríamos parar allí y regresar solo eso. Pero el desafío es pedir una cadena delimitada o una matriz de dos elementos. Entonces, extraemos la cadena con[0]
.Manifestación
Mostrar fragmento de código
fuente
Pyth , 39 bytes:
donde
❤
representa letras no imprimibles.Pruébalo en línea!
Hexdump:
fuente