Bei einer nicht flachen Liste von Ganzzahlen wird eine Liste von Listen ausgegeben, die die Ganzzahlen in jeder Verschachtelungsebene enthält, beginnend mit der am wenigsten verschachtelten Ebene, wobei die Werte in ihrer ursprünglichen Reihenfolge in der Eingabeliste von links nach rechts gelesen werden. Befinden sich zwei oder mehr Listen in der Eingabeliste auf derselben Verschachtelungsebene, sollten sie in der Ausgabe zu einer einzigen Liste zusammengefasst werden. Die Ausgabe sollte keine leeren Listen enthalten. Verschachtelungsebenen, die nur Listen enthalten, sollten vollständig übersprungen werden.
Sie können davon ausgehen, dass die ganzen Zahlen alle im Bereich (einschließlich) liegen [-100, 100]
. Es gibt keine maximale Länge oder Schachtelungstiefe für die Listen. Die Eingabe enthält keine leeren Listen. Jede Verschachtelungsebene enthält mindestens eine Ganzzahl oder Liste.
Die Ein- und Ausgabe muss sich in der systemeigenen Liste / array / enumerable / iterable / etc Ihrer Sprache befinden. Format oder in jedem vernünftigen, eindeutigen Format, wenn in Ihrer Sprache ein Sequenztyp fehlt.
Beispiele
[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 Bytes kürzerPython 2, 78 Bytes
quelle
Retina , 79
Ich weiß, dass die Retina-Experten dies mehr Golf spielen werden, aber hier ist ein Anfang:
Probieren Sie es online aus.
quelle
Mathematica
55 6462 Bytesquelle
JavaScript,
11280 BytesVielen Dank, Neil, dass du uns geholfen hast, 32 Bytes zu sparen.
quelle
!=null
wienull
irgendwie falsch ist. Dasb=
ist auch unnötig. Nachdem Sie das entfernt haben, können Sie das zu bewegen.filter(a=>x)
,&&b
was dann die äußere Funktion zu einem Aufruf der inneren Funktion reduziert, die Sie dann inline können. Ich bin mit dieser links: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]?
würde auswerten,false
ob es gleich ist0
, was innerhalb des Bereichs liegt[-100,100]
. Und so würded=>d
d===+d
, da es 2 Bytes bei der Nullprüfung spart.[...,[[...]]]
) nicht richtig behandelnd=>d
ist in Ordnung, dad
es zu diesem Zeitpunkt immer ein Array oder eine Nulld[0]
gibt,d.map
aber diesbezüglich ein fairer Punkt , obwohl es immer etwas gibt, das für ein Array wahr, aber für eine Zahl falsch ist.Gelee, 24 Bytes
Probieren Sie es online!
Wenn durch Zeilenumbrüche getrennte Listen zulässig wären, könnte dies auf 14 Byte reduziert werden .
Probieren Sie es online!
quelle
Python,
10899 BytesDas scheint mir ein bisschen lang zu sein, aber ich könnte keinen Einzeiler kürzer machen, und wenn ich es
or
stattdessen versucheif
, bekomme ich leere Listen in den Ergebnissen.Probieren Sie es online aus
Edit: 9 Bytes dank Stack Overflow gespeichert
quelle
filter(None,o)
leere Listen entfernen, die sich auf der äußersten Verschachtelungsebene von befindeno
.Python 3, 109 Bytes
Wie immer bedeuten dumme Python 2-Funktionen wie das Vergleichen von
int
s undlist
s, dass Python 3 dahinter rauskommt. Naja...quelle
Perl, 63 Bytes
Input wird erwartet in
@i
, Output produziert in@o
. (Ich hoffe das ist akzeptabel).Beispiel:
Ausgabe:
quelle
Clojure, 119 Bytes
(116 mit seq? Und Eingabe als Listen, eine triviale Modifikation)
Besser gedacht:
Wenn es mit zwei Argumenten (der aktuellen Ebene und einer Sammlung) aufgerufen wird, wird entweder eine ungeordnete Karte mit einem Element erstellt
{level: value}
oder ein Aufruf ausgeführtf
rekursiv aufgerufen, wenn eine Nicht-Nummer (vermutlich eine Sammlung) angezeigt wird.Diese Mini-Maps werden dann zu einer einzigen zusammengefügt
sorted-map
und Schlüsselkollisionen werden nachconcat
Funktionen behandelt.vals
Gibt die Werte der Karte von der ersten bis zur letzten Ebene zurück.Wenn eine Zahl die einzige auf ihrer Ebene ist, bleibt sie eine
vec
, andere werden von in Listen umgewandeltconcat
.Wenn Eingabe a
list
stattvec
dannnumber?
ersetzt werden könnteseq?
, ist seltsamerweise Vektor nichtseq?
aber es istsequential?
. Aber ich bin zu faul, um diese Version zu implementieren, Beispiele zu wiederholen usw.quelle
Schläger 259 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
MATL , 37 Bytes
Probieren Sie es online!
Funktioniert mit der aktuellen Version (13.0.0) der Sprache / des Compilers.
Dies erzeugt die Ausgabe als Zeilen mit durch Leerzeichen getrennten Werten, wobei jede Zeile der gleichen Verschachtelungsebene entspricht und verschiedene Verschachtelungsebenen durch Zeilenumbrüche getrennt sind.
quelle