Jeder liebt verschachtelte Listen! Manchmal ist es jedoch schwierig, eine verschachtelte Liste zu erstellen. Sie müssen sich entscheiden, ob Sie es tiefer nisten möchten oder ob Sie es flacher nisten möchten. Für Ihre Herausforderung müssen Sie also eine Liste "autonestieren". Vergleichen Sie jedes Elementpaar in der Liste, um eine Liste automatisch zu überprüfen.
Wenn das zweite Element kleiner ist, trennen Sie die beiden Elemente, indem Sie zwischen ihnen schließende und öffnende Klammern einfügen:
} { {2 , 1}
Zum Beispiel
{2, 1}
wird{2}, {1}
und{3, 2, 1}
wird{3}, {2}, {1}
Wenn das zweite Element identisch ist, ändern Sie nichts. Bleibt zum Beispiel
{1, 1, 1}
gleich und{2, 1, 1, 1}
würde es werden{2}, {1, 1, 1}
.Wenn der zweite Gegenstand größer ist, verschachteln Sie jeden folgenden Gegenstand eine Ebene tiefer. Zum Beispiel
{1, 2}
würde{1, {2}}
und{1, 2, 3}
würde werden{1, {2, {3}}}
Die Herausforderung
Sie müssen ein Programm oder eine Funktion schreiben, die eine Liste von Zahlen aufnimmt und nach der automatischen Überprüfung dieselbe Liste zurückgibt. Übernehmen Sie diese Eingabe im systemeigenen Listenformat (oder der nächstgelegenen Alternative) oder als Zeichenfolge. Sie müssen keine geschweiften Klammern verwenden, wie ich es in meinen Beispielen getan habe. Sie können jede Art von Klammern verwenden, die in Ihrer Sprache am natürlichsten ist, sofern dies konsistent ist. Sie können davon ausgehen, dass die Liste nur Ganzzahlen enthält. Sie können auch davon ausgehen, dass die Liste mindestens zwei Ziffern enthält. Hier ist ein Beispiel für IO:
{1, 3, 2} --> {1, {3}, {2}}
{1, 2, 3, 4, 5, 6} --> {1, {2, {3, {4, {5, {6}}}}}}
{6, 5, 4, 3, 2, 1} --> {6}, {5}, {4}, {3}, {2}, {1}
{7, 3, 3, 2, 6, 4} --> {7}, {3, 3}, {2, {6}, {4}}
{7, 3, 1, -8, 4, 8, 2, -9, 2, 8} --> {7}, {3}, {1}, {-8, {4, {8}, {2}, {-9, {2, {8}}}}}
Es gelten Standardlücken und die kürzeste Antwort in Bytes gewinnt!
[-100, 100]
aber ich habe nicht vor, gigantische Inputs zu geben.{2, 1}
wird{2}, {1}
“ Wie ist das eine Ebene höher ? Eine Ebene höher wäre{2}, 1
. Was Sie haben, ist das gleiche Niveau.Antworten:
MATL ,
4843 BytesDies verwendet eckige Klammern bei der Eingabe und Ausgabe. Die Ausgabe enthält Kommas ohne Leerzeichen als Trennzeichen.
Beachten Sie, dass die Ausgabe in MATL nicht als verschachtelte Liste interpretiert wird. Es würde in anderen Sprachen und es erfüllt die Ausgabespezifikation in der Herausforderung.
Probieren Sie es online!
Erläuterung
quelle
Haskell, 96 Bytes
Anwendungsbeispiel:
('{':).f $ [7,3,3,2,6,4]
->"{7},{3,3},{2,{6},{4}}"
.Da Haskell keine verschachtelten Listen hat, gebe ich das Ergebnis als Zeichenfolge zurück. Der Verschachtelungsalgorithmus ist einfach: a) Nummer drucken, b) wenn die nächste Nummer größer (kleiner, gleich) ist, print
,{
(},{
,,
), c) einen rekursiven Aufruf mit dem Rest der Liste durchführen, d)}
wenn die Nummer größer (gleich) ist, drucken weniger als die nächste, e) alles in{
und einschließen}
.quelle
Python 3, 98 Bytes
Beispiel:
quelle
Java 8
197 187 193192 BytesVielen Dank an alle Kommentatoren, die mit mir an dieser Monstrosität gearbeitet haben. Es wurde bis auf 187 Bytes golfen, bis ich einen teuren Bug fand. Aufgrund der Macht der
schwarzen Magie"läuft auf" Operator "->" die Byteanzahl ist bei gesunden 192 Bytes.quelle
length,
C
145138 BytesDanke an Giacomo für 7 Bytes!
Die Eingabe erfolgt über Befehlszeilenargumente und die Ausgabe erfolgt über stdout.
Probelauf:
quelle
t=atoi(*v);
anstelle vonsscanf(*v,"%d",&t);
Source zu verwendenfor(;*++v;)
für speichern die ersten 4 und dann von instedif(t<p)P"}{");if(t>p)P"{",n++);
Verwendungt>p?P"}{"):P"{",n++);
für 10 weitere.CJam,
51494846 BytesNutzt die Tatsache aus, dass die Anzahl der letzten Klammern um eins höher ist als die Anzahl der benachbarten Paare, die im Array zunehmen.
Und ich kenne den
ew
Operator nicht, bevor ich ihn erneut implementieren musste.Die Eingabe ist eine durch Leerzeichen getrennte Liste, die durch eckige Klammern getrennt ist.
Erläuterung
Ich werde herausfinden, wie dies mit tatsächlich verschachtelten Arrays gemacht werden kann, anstatt auf Prettyprinting zu vertrauen.
Schließlich
auf Augenhöhe mitgeschlagener Antwort des MATL.quelle
Retina,
71BytesDie Listen werden mit Leerzeichen getrennt, mit geschweiften Klammern:
{1 2 3}
. Negative Zahlen werden nicht unterstützt. Wenn dies ein Problem ist, lösche ich einfach meine Antwort. Netzhaut + negative Zahlen = nicht wert.Probieren Sie es online aus
quelle
JavaScript (ES6), 73 Byte
Erläuterung: Der Fall von aufeinanderfolgenden gleichen Elementen ist einfach. Das Element wird gerade zum innersten Array hinzugefügt (hier durch die
m
Variable dargestellt;n
ist das Array, dasm
als letztes Element enthält, währendo
es die Ausgabe ist). Bei verschiedenen Elementen wird das Element immer in einem neuen innersten Array abgelegt. Der einzige Unterschied besteht darin, ob dieses Array ein Geschwister oder ein untergeordnetes Element des vorherigen innersten Arrays ist. Für zusätzliche Aufmerksamkeit habe ich die Arrays so eingerichtet, dass der ursprüngliche Gegenstand als aufeinanderfolgender gleicher Gegenstand zählt.quelle