“¢ ¬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.
Python 2,
116115103 bajtów-12 bajtów dzięki Neilowi
Wypróbuj online!
źródło
d[n-15]
aby uniknąć stanu.JavaScript ES6,
106102 bajtówWypróbuj online!
źródło
let
zamiastconst
.05AB1E ,
4443 bajty (dzięki Adnan)Wypróbuj online!
Przykładowy wynik:
Wersja, która
N0NNE0NE0ENE0E0ESE0SE0SSE0S0SSW0SW0WSW0W0WNW0NW0NNW
zamiast tego wypycha :Ma również 44 bajty, mój refaktor miał 0 powodów i nie ma 4 powodów podziału na 4.
źródło
4
s?•17¿$Mn]6VAÆ—Dªd—•5B4LJ"NSWE"‡0¡©skD<®ès>®è)
okazuje się, że nie, nie ma żadnego powodu. Użycie 0 jako separatora jest tym samym współczynnikiem kompresji, ponieważ nie zmniejsza długości liczby w konwersji base-5 na base-214. Mógłbym przysiąc, że zrobienie tego w ten sposób uratowało mi bajt.„ €Ã¦•174SÝ©l2ÎG¦˜fÐ98•5BSè#ÐIk©<ès®>è)
aby zapisać 4 bajty.JavaScript -
234154156152120106 106102 bajtówTylko mój drugi raz robię kod golfa !!
Ostatnie poprawki:
Dziękuję @ fəˈnɛtɪk za tę zgrabną zmienną sztuczkę!
Wcześniej: Dobra, więc najnowsza wersja: Dane wejściowe to ciąg znaków, a dane wyjściowe to ciąg znaków, który jest zgodny z regułami, więc przekształciłem go w funkcję, a dzięki redukcjom stałem się jeszcze mniejszy (również funkcja jest anonimowa, co oznacza, że moja ma jakoś wplątał się w odpowiedź innego js. Oops! On (powelles) miał go pierwszy !!):
Może być używany przez:
Remade (nie działa) z wyjściem - 120:
Zauważ, że początkowo popełniłem błąd, mając dla pierwszego indeksu równą a.length zamiast a.length-1. Dzięki @Neil za zwrócenie uwagi, że to nie działa dla NNW.
Uwaga 2: Dziękuję @Neil i @ETHProductions za pomoc w skróceniu kodu!
Pierwotny:
źródło
NNW
.,
, i = a.indexOf (p), [a [i-1 i 15], a [i + 1 i 15]])Partia, 196 bajtów
Pętle przechodzą przez każdą parę punktów kompasu, drukując jeden, gdy drugi pasuje. Na przykład dla parametru
ENE
, kiedy pętla osiągaENE
, zmiennas
zawieraNE
to, co jest drukowane, a następnie, gdy pętla przesuwa się do przoduE
, zmiennas
zawieraENE
i takE
jest drukowana. Następnie jedna para musi być w specjalnej obudowie, aby uniknąć drukowania punktów kompasu w niewłaściwej kolejności.źródło
Haskell ,
10099 bajtówWypróbuj online! Połączenia
(s#) "N"
zwrotne("NNW","NNE")
.s
to nieskończone powtarzanie listy kierunków, dlatego nie musimy dodawać dodatkowychN
iNNE
podobnie jak niektóre inne odpowiedzi, aby poprawnie obsługiwać krawędzie listy.Dzięki @nimi za uratowanie jednego bajtu!
źródło
(a:b:c:r)!x| ... =r!x;(s!)
.Galaretka ,
4038 bajtówWypróbuj online! (dodano stopkę pokazującą, że wynikiem jest lista dwóch elementów) ... lub zobacz wszystkie przypadki .
(Nie jestem do końca pewien, dlaczego
1323DRẋ4
w miejscu“¢)`)’ḃ3R
nie działa w tej chwili.)W jaki sposób?
źródło
SOGL , 33 bajty
Pierwsza część
≠┐πΜ]ρ½d⁹V¹-┐*╔╤¹Ψæ;¶‘
to skompresowany ciąg znakówskompresowany za pomocą niestandardowego słownika za pomocą
ENSW
Reszta programu:
źródło
bytes
tytule znajduje się link do strony kodowejPHP, 122 bajty
źródło
$argv[1]
z$argn
i stosując opcję -R. jeśli użyjesz przestarzałych funkcji, jeśli mogą kończyć się naereg("([^_]+)_{$argn}(_[^_]+)",N_NNE_NE_ENE_E_ESE_SE_SSE_S_SSW_SW_WSW_W_WNW_NW_NNW_N_NNE,$t);echo$t[1].$t[2];
Rubin - 94 bajtów
Riff na odpowiedź Blue Okiris , aby skorzystać z ładnego skróconego Rubiego (
%w[]
składnia ip
konkretnie):źródło
Japt ,
6652 bajtówZaoszczędź 14 bajtów dzięki @ETHproductions
Wypróbuj online!
Wyjaśnienie:
źródło
'
sięq'o
i będzie działać dokładnie tak samo :-)[J1]£VgX+VaU
aby zaoszczędzić kilka bajtówCJam, 41
Wypróbuj online
źródło
PHP, 115 bajtów
-2 bajty za pomocą przestarzałej funkcji
split
zamiastexplode
PHP, 128 bajtów
PHP, 134 bajtów
źródło
PHP,
110109 bajtówOszczędność 1 bajtu dzięki Jörgowi Hülsermannowi .
źródło
preg_replace
zepreg_filter
aby zapisać 1 bajtPython 3 -
112107 bajtówOparłem to na mojej odpowiedzi Javascript:
Przerobić:
Użyj jak powiedz
Oryginalny:
źródło
MATL , 43 bajty
Wypróbuj online!
Wyjaśnienie
źródło
c,
222216211 bajtówWypróbuj online
źródło
JavaScript (ES6), 189 bajtów
Po prostu pobiera dane wejściowe, sprawdza je i zwraca.
źródło
JavaScript (ES6), 94 bajty
Oczekuje łańcucha pisanego wielkimi literami, takiego jak
"ENE"
. Zwraca ciąg oddzielony przecinkami, taki jak"NE,E"
.Jak to działa
0+s+0
Wywołanie wyrażenia jest wymuszane na ciąg znakówsplit()
. Na przykład, jeśli dane wejściowe są"ENE"
, ciąg zostanie podzielony na"0ENE0"
:Prowadzi to do następującej tablicy:
Ponownie, ta tablica jest wymuszana na ciąg, gdy
exec()
jest wywoływana. Wyrażenie regularne jest zatem stosowane do:Szukamy kolejnych znaków nienumerycznych (
\D+
), po których następuje przecinek, a następnie kolejnych znaków nienumerycznych. Zwraca tablicę[ "NE,E" ]
. Prawdopodobnie moglibyśmy się tam zatrzymać i zwrócić właśnie to. Ale wyzwanie polega na zapytaniu o łańcuch rozdzielany lub tablicę dwuelementową. Tak więc wyodrębniamy ciąg[0]
.Próbny
Pokaż fragment kodu
źródło
Pyth , 39 bajtów:
gdzie
❤
reprezentuje niezadrukowane litery.Wypróbuj online!
Hexdump:
źródło