W Elixir listy (połączone) mają format, w [head | tail]
którym nagłówek może być dowolny, a tail jest listą reszty listy, a []
- pusta lista - jest jedynym wyjątkiem.
Listy można również pisać tak, jak [1, 2, 3]
to jest równoważne[1 | [2 | [3 | []]]]
Twoim zadaniem jest konwersja listy zgodnie z opisem. Dane wejściowe zawsze będą prawidłową listą (w eliksirach) zawierającą tylko liczby pasujące do wyrażenia regularnego \[(\d+(, ?\d+)*)?\]
. Możesz wprowadzić dane za pomocą (po jednym spacji po każdym przecinku) lub bez spacji. Wyjście może być ze (jedna spacja przed i po każdej |
) lub bez spacji.
W przypadku danych wejściowych z zerami wiodącymi można wyprowadzać dane bez zer lub z.
Dane wejściowe należy traktować jako ciąg znaków (w przypadku pisania funkcji), podobnie jak dane wyjściowe.
Przykłady
[] -> []
[5] -> [5 | []]
[1, 7] -> [1 | [7 | []]]
[4, 4, 4] -> [4 | [4 | [4 | []]]]
[10, 333] -> [10 | [333 | []]]
powiązane , a nie duplikat, ponieważ częściowo wiąże się to z dodaniem trybu ]
do końca. Dodatkowo, odpowiedź Haskella tutaj jest zupełnie inna niż tam.
Odpowiedzi:
Haskell, 50 bajtów
Wypróbuj online!
+0
Pozwala na typ sprawdzania Haskell wiedzieć, że mamy do czynienia z listy numerów, więcread
będzie analizować ciąg wejściowy dla nas.źródło
Python 2 , 50 bajtów
Wypróbuj online!
źródło
JavaScript (ES6), 50 bajtów
Wypróbuj online!
Wersja rekurencyjna, 51 bajtów
Wypróbuj online!
źródło
Retina ,
39333220 bajtówOszczędność 13 bajtów dzięki H.PWiz, ovs, tylko ASCII i Neil.
Wypróbuj online!
Wyjaśnienie
Jeśli nie mamy pustej listy, dodaj przecinek końcowy.
Podczas gdy są przecinki, owiń je
|[ thing ]
.źródło
\b]
je,]
. (W przeciwnym razie samodzielnie odkryłem to samo rozwiązanie).\b
jakiegoś powodu zapomniałem coś> _> 20 bajtów @MememonicPerl 5
-pl
,3128 bajtówWypróbuj online!
W jaki sposób?
źródło
Eliksir ,
11185 bajtówWypróbuj online!
Nigdy wcześniej nie korzystałem z Elixiru. Definiuje funkcję, która pobiera ciąg i odwołanie do siebie i zwraca ciąg.
źródło
Cejlon , 113 bajtów
Wypróbuj online!
Oto napisane:
Wypróbuj online!
Jak zauważyli ovs w (teraz usuniętym) komentarzu: Jeśli wybierzesz opcje „bez spacji” dla danych wejściowych i wyjściowych wskazanych w pytaniu, możesz zabezpieczyć jeszcze 3 bajty (te oczywiste ze spacjami w nich).
Jeśli nie musimy analizować danych wejściowych, ale możemy po prostu pobrać sekwencję jako dane wejściowe, jest ona znacznie krótsza (69 bajtów).
Wypróbuj online!
źródło
Python 3 , 65 bajtów
Wypróbuj online!
Jeśli wejściem może być zamiast tego lista, to:
Python 3 , 53 bajty
Wypróbuj online!
źródło
SNOBOL4 (CSNOBOL4) , 114 bajtów
Wypróbuj online!
źródło
Stax , 19 bajtów
Uruchom i debuguj
Mój pierwszy post na Stax, więc prawdopodobnie nie jest optymalny.
Rozpakowano i skomentowano:
Uruchom i debuguj ten
źródło
Łuska , 22 bajty
Wypróbuj online!
źródło
Befunge-98 (PyFunge) ,
2221 bajtówWypróbuj online!
Gdyby nie było dziwnych ograniczeń produkcji, moglibyśmy to zrobić w 18:
Zabawne jest to, że technicznie jest to program, który nic nie robi w Pythonie.
źródło
Rubin
-p
, 39 bajtówPełny program:
Wypróbuj online!
Rubinowy ,
4845 bajtówFunkcja rekurencyjna:
Wypróbuj online!
źródło
R ,
847169 bajtówWypróbuj online!
źródło
\K
spojrzeniu z tyłuProton , 57 bajtów
Wypróbuj online!
źródło
Galaretka , 19 bajtów
Wypróbuj online!
Nierekurencyjna alternatywa dla rozwiązania Erika .
źródło
Galaretka , 18 bajtów
Wypróbuj online!
źródło
Galaretka , 18 bajtów
Pełny program wypisujący wynik (jako monadyczny link przyjmuje listę znaków, ale zwraca listę znaków i liczb całkowitych).
Wypróbuj online!
W jaki sposób?
źródło
Java 10, 107 bajtów
Wypróbuj online.
Wyjaśnienie:
źródło
Standardowy ML , 71 bajtów
Wypróbuj online! Używa formatu bez spacji. Np .
it "[10,333,4]"
Plony"[10|[333|[4]|[]]]]"
.bez golfa
Wypróbuj online!
źródło
R ,
140136 bajtówZmniejsz o 4 bajty zgodnie z dobrą radą Giuseppe.
Wypróbuj online!
źródło
substr
jest krótszy i pierwszympaste0
może byćpaste
uzyskanie go do 136 bajtów.eval
,parse
isub
zamiastunlist
,strsplit
asubstr
, ja też tylko udało 136 bajtów (myślałem, że może on być krótszy, ale to nie było)R , 108 bajtów
Wypróbuj online!
Prawie rok zajęło znalezienie lepszego rozwiązania R niż poprzednie ... powinien wiedzieć,
Reduce
że to będzie odpowiedź! Wyjścia bez spacji, dane wejściowe mogą być ze spacjami lub bez.źródło
Python 2 , 63 bajty
Wypróbuj online!
źródło
sed +
-E
, 46 bajtówDość proste podejście. Druga linia przyjmuje
[\d+, ...]
i zmienia na[\d | [...]]
. Trzecia linia przeskakuje z powrotem do pierwszej linii, jeśli zmiana zakończyła się powodzeniem. Podstawienie powtarza się aż do niepowodzenia, a następnie program kończy się. Uruchom zsed -E -f filename.sed
, przekazując dane wejściowe przez stdin.źródło
Czerwony , 110 bajtów
Wypróbuj online!
Objaśnienie wersji bez golfa:
Czerwony jest tak łatwo czytelny, że wątpię, czy potrzebowałem dodać powyższe komentarze :)
źródło
Perl 6 , 38 bajtów
Wypróbuj online!
źródło