“¢ ¬9£Hæz¥{çb¤S®!‘ṃ€“¡&¦»
¢iµ’,‘ị¢
Wypróbuj online!
Pobiera małe litery.
-2 dzięki Jonathan Allan .
-1, ponieważ okazuje się, że jest to poprawne jako funkcja :)
Dzięki Jonathanowi Allanowi (i Dennisowi) możesz teraz usunąć €
. Niestety byłoby to tutaj niekonkurencyjne.
Szczegółowe wyjaśnienie algorytmu :
Zazwyczaj zaczynamy wyjaśniać od dolnego (głównego) linku, schodząc w dół, ale tutaj wydaje mi się, że lepiej jest wyjaśnić od góry.
Po pierwsze, po prostu ładujemy listę [1, 32, 7, 57, 2, 67, 17, 92, 3, 94, 19, 119, 4, 109, 9, 34]
. To wygląda na przypadkowe liczby, co? To właściwie jest lista liczb skompresowanych w bazie 5, więc dekompresujemy ją w bazie 5. Teraz to wygląda [[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]]
. Nadal wyglądają losowo, ale tak naprawdę jest to NESW
mapowana szesnaście współrzędnych, więc nie jesteśmy daleko od uzupełnienia listy (galaretka ma indeks 1). Robiąc ostateczne mapowanie, otrzymujemy [['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']]
pełną listę, której chcemy (łańcuchy galaretki są w formie [char1, char2, char3, ...]
).
Ponieważ zbudowaliśmy teraz listę współrzędnych, pracujemy z nią. W grę wchodzi główny link. Najpierw ładujemy listę, którą zbudowaliśmy, a następnie bierzemy indeks, w którym znajduje się współrzędna wejściowa (jako argument wiersza poleceń). Następnie łączymy jej poprzednika i jego następcę z listą i używamy ich jako modułów indeksy do tej samej listy współrzędnych, aby wziąć współrzędną odpowiednio z lewej i prawej strony wejścia. Można by pomyśleć, że w końcu skończyliśmy, ale tak naprawdę jest jeszcze jedna rzecz, separator. Jest to ważne jako funkcja, ponieważ 1) Możesz wywołać to za pomocą <integer>Ŀ
2) Możesz także definiować inne funkcje (np. Importowanie modułów). Teraz skończymy. Jako pełny program nie ma separatora, ale jest w porządku, ponieważ działa jako funkcja.
Objaśnienie kodu link-by-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.