Geléia , 37 34 bytes
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Experimente online!
Recebe entrada em minúscula.
-2 graças a Jonathan Allan .
-1, pois isso é válido como uma função :)
Graças a Jonathan Allan (e Dennis), agora você pode remover o €
. Infelizmente, isso não seria competitivo aqui.
Explicação detalhada do algoritmo :
Geralmente começamos a explicar a partir do link inferior (principal), descendo, mas aqui acho que é mais apropriado explicar a partir do topo.
Primeiro, simplesmente carregamos a lista [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Parece números aleatórios né? Bem, na verdade, essa é uma lista de números compactados com base 5, portanto, descompactamos com base 5. Agora 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]]
. Ainda são coisas de aparência aleatória, mas essa é realmente uma NESW
lista mapeada das dezesseis coordenadas, por isso não estamos longe de concluir a lista (Jelly é indexada em 1). Ao fazer o mapeamento final, obtemos [['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 é a lista completa que queremos (as strings Jelly estão no formulário [char1, char2, char3, ...]
).
Como agora criamos a lista de coordenadas, trabalhamos com ela. O link principal entra em jogo. Primeiro, carregamos a lista que construímos e, em seguida, pegamos o índice no qual a entrada (como argumento da linha de comando) reside. Em seguida, associamos seu predecessor e seu sucessor a uma lista e os usamos como modulares na mesma lista de coordenadas para levar a coordenada à esquerda e à direita da entrada, respectivamente. Você pensaria agora que finalmente terminamos, mas na verdade há mais uma coisa, o separador. Isso é válido como uma função, pois 1) Você pode chamá-lo usando <integer>Ŀ
2) Você também pode definir outras funções (como importar módulos). Agora terminamos. Como um programa completo, isso não tem um separador, mas tudo bem, pois funciona como uma função.
Explicação do código link a link :
¢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.