Jelly , 37 34 Bytes
“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Probieren Sie es online!
Übernimmt die Eingabe in Kleinbuchstaben.
-2 Danke an Jonathan Allan .
-1 da sich herausstellt, dass dies als Funktion gültig ist :)
Dank Jonathan Allan (und Dennis) können Sie jetzt die entfernen €
. Das wäre hier leider nicht konkurrierend.
Detaillierte Erklärung des Algorithmus :
Normalerweise beginnen wir mit dem Erklären vom unteren (Haupt-) Link aus, aber ich halte es für angemessener, es von oben zu erklären.
Zuerst laden wir einfach die Liste hoch [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. Das sieht nach Zufallszahlen aus, oder? Nun, das ist eigentlich eine Liste von Zahlen mit Basis 5-Komprimierung, also dekomprimieren wir sie mit Basis 5. Jetzt sieht es so aus [[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]]
. Es sieht immer noch zufällig aus, aber dies ist eine NESW
Liste mit 16 Koordinaten. Wir sind also nicht weit davon entfernt, die Liste zu vervollständigen (Jelly ist 1-indiziert). Wenn wir das endgültige Mapping machen, erhalten wir [['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']]
, was die vollständige Liste ist, die wir wollen (Jelly Strings sind in der Form [char1, char2, char3, ...]
.)
Da wir jetzt die Koordinatenliste erstellt haben, arbeiten wir damit. Der Hauptlink kommt ins Spiel. Zuerst laden wir die Liste, die wir erstellt haben, und nehmen dann den Index, in dem sich die Eingabe- (als Befehlszeilenargument) -Koordinate befindet. Dann koppeln wir ihren Vorgänger und ihren Nachfolger zu einer Liste und verwenden sie als modular Indiziert in dieselbe Koordinatenliste, um die Koordinate links und rechts von der Eingabe zu nehmen. Sie würden jetzt denken, wir sind endlich fertig, aber es gibt noch eine Sache, den Separator. Dies gilt als Funktion, da 1) Sie es mit <integer>Ŀ
2) aufrufen können. Sie dürfen auch andere Funktionen definieren (wie das Importieren von Modulen). Nun sind wir fertig. Als vollständiges Programm hat dies kein Trennzeichen, aber das ist in Ordnung, da es als Funktion funktioniert.
Erklärung des Link-by-Link-Codes :
¢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.