Biorąc pod uwagę niepłaską listę liczb całkowitych, wypisz listę list zawierających liczby całkowite na każdym poziomie zagnieżdżenia, zaczynając od poziomu najmniej zagnieżdżonego, z wartościami w ich oryginalnej kolejności na liście wejściowej podczas czytania od lewej do prawej. Jeśli dwie lub więcej list znajduje się na tym samym poziomie zagnieżdżenia na liście danych wejściowych, należy je połączyć w jedną listę danych wyjściowych. Dane wyjściowe nie powinny zawierać żadnych pustych list - poziomy zagnieżdżenia zawierające tylko listy należy całkowicie pominąć.
Możesz założyć, że wszystkie liczby całkowite należą do (włącznie) zakresu [-100, 100]
. Dla list nie ma maksymalnej długości ani głębokości zagnieżdżenia. Na wejściu nie będzie pustych list - każdy poziom zagnieżdżenia będzie zawierał co najmniej jedną liczbę całkowitą lub listę.
Dane wejściowe i wyjściowe muszą znajdować się na rodzimej liście / tablicy / enumerable / iterable / etc w twoim języku. format lub w jakimkolwiek rozsądnym, jednoznacznym formacie, jeśli w twoim języku brakuje typu sekwencji.
Przykłady
[1, 2, [3, [4, 5], 6, [7, [8], 9]]] => [[1, 2], [3, 6], [4, 5, 7, 9], [8]]
[3, 1, [12, [14, [18], 2], 1], [[4]], 5] => [[3, 1, 5], [12, 1], [14, 2, 4], [18]]
[2, 1, [[5]], 6] => [[2, 1, 6], [5]]
[[54, [43, 76, [[[-19]]]], 20], 12] => [[12], [54, 20], [43, 76], [-19]]
[[[50]], [[50]]] => [[50, 50]]
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}~DeleteCases~{}&
Cases[#,_?AtomQ,{i}]~Table~{i,Depth@#}/.{}->Nothing&
, 2 bajty krótszePython 2, 78 bajtów
źródło
Retina , 79
Ja wiem, eksperci Retina golf będzie to więcej, ale tu jest początek:
Wypróbuj online.
źródło
Mathematica
55 6462 bajtówźródło
JavaScript,
11280 bajtówDzięki Neil za pomoc w goleniu 32 bajtów.
źródło
!=null
ponieważnull
jest to fałsz. Jestb=
to również niepotrzebne. Po usunięciu możesz przejść.filter(a=>x)
do tego,&&b
co następnie redukuje funkcję zewnętrzną do wywołania funkcji wewnętrznej, którą możesz następnie wstawić. Ja zostaję z tym:f=(a,b=[],c=0)=>a.map(d=>d[0]?f(d,b,c+1):b[c]=[...b[c]||[],d])&&b.filter(d=>d)
.d[0]?
ocenia,false
czy było równe0
, co mieści się w zakresie[-100,100]
. I tak też by byłod=>d
d===+d
jednak, ponieważ zapisuje 2 bajty na czeku zerowym.[...,[[...]]]
poprawnie ostatniej sprawy (ani żadnych spraw z nią )d=>d
jest OK, ponieważd
w tym momencie zawsze jest tablica lub zero, ale słuszna jest kwestiad[0]
, chociaż zawszed.map
istnieje prawda, która będzie tablicą, ale fałszem liczby.Galaretka, 24 bajty
Wypróbuj online!
Gdyby dozwolone były listy rozdzielone znakiem nowej linii, można by dodać do 14 bajtów .
Wypróbuj online!
źródło
Python,
10899 bajtówWydaje mi się to trochę za długie, ale nie mogłem skrócić linijki o jeden wiersz i jeśli spróbuję użyć
or
zamiast tegoif
, otrzymam puste listy w wynikach.Wypróbuj online
Edycja: Zapisano 9 bajtów dzięki przepełnieniu stosu
źródło
filter(None,o)
do usunięcia pustych list znajdujących się na zewnętrznym poziomie zagnieżdżeniao
.Python 3, 109 bajtów
Jak zawsze, głupie funkcje Pythona 2, takie jak porównywanie
int
s ilist
s, oznaczają, że Python 3 ustępuje. No cóż...źródło
Perl, 63 bajty
Dane wejściowe są oczekiwane w
@i
, dane wyjściowe wyprodukowane w@o
. (Mam nadzieję, że jest to do przyjęcia).Przykład:
Wydajność:
źródło
Clojure, 119 bajtów
(116 z sekwencją? I wprowadzaniem jako listy, trywialna modyfikacja)
Lepsze przeznaczenie:
Po wywołaniu z dwoma argumentami (bieżącym poziomem i kolekcją) albo tworzy jednoelementową, nieuporządkowaną mapę podobną
{level: value}
, albo wywołujef
rekurencyjnie, jeśli widzi się liczbę inną niż (prawdopodobnie kolekcję).Te mini-mapy są następnie łączone w jedną,
sorted-map
a kolizje kluczy są obsługiwane wedługconcat
funkcji.vals
zwraca wartości mapy od pierwszego poziomu do ostatniego.Jeśli liczba jest jedyną na swoim poziomie, to pozostaje a
vec
, inne są konwertowane na listy przezconcat
.Jeśli wejście było
list
zamiast,vec
tonumber?
może zostać zastąpione przezseq?
, dziwnie wektor nie jest,seq?
ale jestsequential?
. Ale jestem zbyt leniwy, aby wdrożyć tę wersję, przerobić przykłady itp.źródło
Rakieta 259 bajtów
Nie golfowany:
Testowanie:
Wydajność:
źródło
MATL , 37 bajtów
Wypróbuj online!
Działa z bieżącą wersją (13.0.0) języka / kompilatora.
Daje to wynik jako linie wartości oddzielonych spacjami, gdzie każda linia odpowiada temu samemu poziomowi zagnieżdżenia, a różne poziomy zagnieżdżenia są oddzielone znakami nowej linii.
źródło