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 NESWlista 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.