“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Provalo online!
Accetta input in minuscolo.
-2 grazie a Jonathan Allan .
-1 poiché risulta che questo è valido come funzione :)
Grazie a Jonathan Allan (e Dennis), ora puoi rimuovere il file €
. Sfortunatamente, qui non sarebbe in competizione.
Spiegazione dettagliata dell'algoritmo :
Di solito iniziamo a spiegare dal link in basso (principale), andando in basso, ma qui mi sento più appropriato spiegare dall'alto.
Innanzitutto, carichiamo semplicemente l'elenco [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Sembra numeri casuali eh? Bene, questo è in realtà un elenco di numeri compressi in base 5, quindi lo decomprimiamo in base 5. Ora sembra [[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]]
. Ancora roba dall'aspetto casuale, ma questo è in realtà un NESW
elenco composto da sedici coordinate, quindi non siamo lontani dal completare l'elenco (Jelly è 1-indicizzata). Facendo la mappatura finale, otteniamo[['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']]
, che è l'elenco completo che vogliamo (le stringhe Jelly sono nel modulo [char1, char2, char3, ...]
.)
Dato che ora abbiamo creato l'elenco delle coordinate, lavoriamo con esso. Entra in gioco il link principale. Innanzitutto, cariciamo l'elenco che abbiamo creato, quindi prendiamo l'indice in cui risiede la coordinata dell'input (come argomento della riga di comando). Quindi, accoppiamo il suo predecessore e il suo successore in un elenco e li usiamo come modulari indici nella stessa lista di coordinate per prendere le coordinate rispettivamente a sinistra e a destra dell'input. Ora penseresti che abbiamo finalmente finito, ma in realtà c'è un'altra cosa, il separatore. Questo è valido come funzione, poiché 1) Puoi chiamarlo usando<integer>Ŀ
2) Puoi anche definire altre funzioni (come importare moduli). Ora abbiamo finito. Come programma completo, questo non ha un separatore, ma va bene, dal momento che funziona come una funzione.
Spiegazione del codice collegamento per collegamento :
¢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.