Gelée , 37 à 34 octets
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Essayez-le en ligne!
Prend en minuscule.
-2 grâce à Jonathan Allan .
-1 puisqu'il s'avère que cette fonction est valide :)
Grâce à Jonathan Allan (et Dennis), vous pouvez maintenant supprimer le fichier €
. Malheureusement, ce ne serait pas en concurrence ici.
Explication détaillée de l'algorithme :
Nous commençons habituellement à expliquer en partant du bas (lien principal) en descendant, mais j'estime qu'il est plus approprié d'expliquer en partant du haut.
Premièrement, nous chargeons simplement la liste [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Cela ressemble à des nombres aléatoires hein? Eh bien, il s’agit en fait d’une liste de nombres compressés en base 5; nous le décompressons donc en base 5. Maintenant ça ressemble [[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]]
. Toujours des éléments aléatoires, mais il s'agit en fait d'une NESW
liste cartographiée des seize coordonnées, de sorte que nous ne sommes pas loin de la compléter (Jelly est indexée 1). Nous obtenons le mappage final [['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']]
, qui correspond à la liste complète que nous souhaitons (les chaînes Jelly sont sous la forme [char1, char2, char3, ...]
.)
Depuis que nous avons construit la liste de coordonnées, nous travaillons avec elle. Le lien principal entre en jeu. Tout d'abord, nous chargeons la liste que nous avons construite, puis prenons l'index dans lequel se trouve la coordonnée d'entrée (en tant qu'argument de ligne de commande). Ensuite, nous lions son prédécesseur et son successeur dans une liste, et nous les utilisons en tant que modulaires. index dans la même liste de coordonnées pour prendre les coordonnées à gauche et à droite de l’entrée, respectivement. Vous penseriez maintenant que nous avons enfin terminé, mais il y a en fait une dernière chose, le séparateur. Ceci est valable en tant que fonction, puisque 1) vous pouvez l'appeler en utilisant <integer>Ŀ
2) Vous pouvez également définir d'autres fonctions (comme l'importation de modules). Maintenant, nous avons fini. En tant que programme complet, il n'y a pas de séparateur, mais ce n'est pas grave, car cela fonctionne comme une fonction.
Explication du code lien par lien :
¢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.