Eingang
Ein Array, das Arrays oder positive, aufeinanderfolgende, aufsteigende Ganzzahlen enthalten kann. Die Arrays können eine beliebige Anzahl von Arrays enthalten, usw. Es sind keine Arrays leer.
Ausgabe
Dieses Array vereinfacht
So vereinfachen Sie ein Array
Wir werden das Array [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
als unser Beispiel verwenden.
Zuerst prüfen wir, wie tief die Werte verschachtelt sind. Hier sind die Tiefen und die Zahlen in diesen Tiefen:
0 1
1 2 3 9
2 4 7
3 5 6
5 8
Wir konstruieren das Ausgabearray, indem wir die Zahlen im ursprünglichen Array nehmen, sie nach der Tiefe ihrer Verschachtelung gruppieren und dann die Gruppen in der Tiefe der ursprünglichen Tiefe ihrer Elemente verschachteln. Ordne die Zahlen in aufsteigender Reihenfolge und aufsteigender Tiefe an.
Unsere Ausgabe ist also [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
Beispiele
[1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]] -> [1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
[[[1]], [2, [3]], 4, [5, [6, [7, [8], [9, [[10]]]]]]] -> [4, [2, 5], [[1, 3, 6]], [[[7]]], [[[[8, 9]]]], [[[[[[10]]]]]]]
[1] -> [1]
[1, [2], [[3]], [[[4]]], [[[[5]]]]] -> [1, [2], [[3]], [[[4]]], [[[[5]]]]]
[1, [[[[2], 3]]] [[4]]] -> [1, [[4]], [[[3]]], [[[[2]]]]]
quelle
8
Zeile fehlt ein KlammerpaarSo, our output is.....
. Sie haben es jedoch im Beispiel-Snippet behoben.[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[]]]], [[[[[8]]]]]]
?Antworten:
Gelee , 8 Bytes
Die Ausgabe erfolgt auf einer Ebene pro Zeile mit leeren Zeilen für Ebenen ohne Elemente. Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6),
139109 BytesErläuterung anhand der Beispieleingabe:
v
ist eine Hilfsmethode, die die Arrays (mit Parameter1
) oder Werte (ohne Parameter) zurückgibt . Wir beginnen mita = [1, [2, 3], [[4]], [[[5, 6], 7, [[[8]]]], 9]]
, was nicht leer ist. Wir filtern die Arrays heraus und geben[1]
. Wir bezeichnen uns dann rekursiv als die Arrays, die zusammen verkettet sind, was[2, 3, [4], [[5, 6], 7, [[[8]]]], 9]
zur Folge hat[2, 3, 9, [4, 7], [[5, 6]], [[[[8]]]]]
. Wir filtern die Arrays erneut heraus, wodurch wir den zweiten Term unserer Ausgabe erhalten.[2, 3, 9]
Wir müssen jedoch darauf achten, hier kein leeres Array einzufügen. Es bleibt ihnen überlassen, die Arrays[4, 7], [[5, 6]], [[[[8]]]]
in Arrays zu verpacken und sie an die Ausgabe anzuhängen[1, [2, 3, 9], [[4, 7]], [[[5, 6]]], [[[[[8]]]]]]
.quelle
filter
. Beginnen Sie vielleicht mitF=(x,y)=>x.filter(y)
[].concat(...v(1))
mitv(1)
zu speichern 14 Bytes. Es gibt wahrscheinlich auch ein paar andere Dinge, aber ich habe es schwer, die geschachtelten Klammern in meinem Kopf im Auge zu behalten.[].concat(...v(1))
ist ein ganz anderes Biestv(1)
, sonst würde ich es nicht tun! Als einfaches Beispiel betrachten wira = [2, [3], [[4]]]
dannv(1) = [[3], [[4]]]
doch[].concat(...v(1)) = [3, [4]]
.05AB1E ,
27262521 BytesProbieren Sie es online! (leicht modifiziert, da
.g
noch nicht auf TIO)Erläuterung
Die Hauptstrategie besteht darin, jede mögliche Ebene des verschachtelten Arrays zu durchlaufen und alle Ziffern in einer Zeile zu drucken, während die Nicht-Ziffern (Listen) in einer Liste eine Ebene weniger verschachtelt bleiben.
quelle
Perl, 52 Bytes
Nur eine rekursive Subroutine. (ungewöhnlich für eine Perl-Antwort, ich weiß ..)
Nenne es so:
Jede Zeile der Ausgabe entspricht einer Tiefenebene des Arrays (daher die leere Zeile im obigen Beispiel).
Es kann in ein vollständiges Programm für ein paar weitere Bytes umgewandelt werden: add
-n
flag und aneval
(inside,@{ }
um die Eingabe in ein Array und nicht in ein Arrayref umzuwandeln), um die Eingabe in ein Perl-Array umzuwandeln:Mein früherer Ansatz war etwas länger (65 Bytes), aber immer noch interessant, also lasse ich es hier:
quelle
JavaScript (ES6) 121
144 152Bearbeiten Viel überarbeitet, 1 Byte gespeichert, Patrick Roberts und 21 weitere, die nur den Code überprüfen
Rekursive Funktion, die an Arrays in Eingabe und Ausgabe arbeitet. Ich weiß nicht , wie die Anfrage von Elementen in der Tiefe 1 als Einzelelemente in Ausgangsarray (während höhere Niveaus als ein Element gruppieren)
[l1,l1, [l2...], [[l3...]] ]
. Dies wäre zwar direkter:[ [l1...], [[l2...]], [[[l3...]]] ]
Neue Zeile zur besseren Lesbarkeit hinzugefügt.
Einige Hinweise: Die Zeile 2 wird bei jedem rekursiven Aufruf immer wieder ausgewertet, aber nur die letzte Iteration am Ende der Rekursion ist sinnvoll.
Durch die spezielle Behandlung
d==0
in Zeile 2 wird die Anomalie für Elemente der Ebene 1 behoben.Die
n
rekursive Funktion behandelt die Verschachtelung des Arrays in der AusgabePrüfung
quelle
v[0]
anstelle vonv.map
. Spart 1 Byte.JavaScript (ES6) 168 Byte
Demo
quelle
PHP, 145 Bytes
Nervenzusammenbruch
quelle
Pyth,
1916 BytesProbieren Sie es online aus. Testsuite.
Beachten Sie das führende Leerzeichen. Gibt Ebenen in Zeilen wie die Perl-Antwort aus.
Erläuterung
Q
.f
Weitere ArtikelT
vonQ
am:s
umI
Dentity istT
.p
rintT
plus ein Leerzeichen+
...d
.s
um die Gegenstände. Dadurch wird eine Ebene mit Arrays von jedem Element entfernt. Wenn keine mehr übrig sind, ergibt sich0
.=
das Ergebnis zuQ
.W
Wenn das Ergebnis nicht leer ist, drucken Sie die leere Zeichenfolgek
und eine neue Zeile.quelle
Haskell,
124123 BytesDa Haskell standardmäßig keine gemischten Listen (Ganzzahlen und Liste von Ganzzahlen) unterstützt, definiere ich einen benutzerdefinierten Listentyp
L
. Anwendungsbeispiel:Hinweis: Die Ausführung dauert einige Zeit, da alle positiven Ints (32 oder 64 Bit) durchlaufen werden, um nach einem so tiefen Nestlevel zu suchen. Außerdem: Der benutzerdefinierte Listentyp kann standardmäßig nicht gedruckt werden. Wenn Sie also das Ergebnis wie im obigen Beispiel anzeigen möchten, müssen Sie
deriving Show
derdata
Deklaration (->) hinzufügendata L=I Int|R[L] deriving Show
). Da es nicht benötigt wird, um eine L-Liste von einer Funktion zurückzugeben, zähle ich die Bytes nicht.Wie es funktioniert:
Bearbeiten @BlackCap hat ein Byte gespeichert, indem von
>>=
zurdo
Notation gewechselt wurde . Vielen Dank!quelle
h l=R$do d<-[1..];[i|(e,i)<-0#l,d==e]!d
JavaScript (ES6),
127137134 BytesNimmt ein Array als Eingabe und gibt eine Zeichenfolge zurück.
Testfälle
Code-Snippet anzeigen
quelle