Diese Herausforderung wurde durch eine Frage zu Mathematica.SE inspiriert .
Angenommen, Sie haben eine verschachtelte Liste / ein Array mit einer beliebigen Struktur (die Listen auf jeder Ebene müssen nicht unbedingt die gleiche Länge haben). Der Einfachheit halber nehmen wir an, dass die Knoten nicht negative ganze Zahlen oder leere Arrays sind. Als Beispiel
[[[1, 3], 2], [1, 4], 12, [[0, [], 0], [5, [7]]]]
Manchmal ist es bequemer, diese Liste zu reduzieren, um die Knoten zu manipulieren, z
--> [1, 3, 2, 1, 4, 12, 0, 0, 5, 7]
--> [1, 1, 0, 1, 0, 0, 0, 0, 1, 1]
Am Ende möchten Sie jedoch die ursprüngliche Struktur beibehalten und diese dann wieder herstellen
--> [[[1, 1], 0], [1, 0], 0, [[0, [], 0], [1, [1]]]
Ihre Aufgabe ist es, diesen letzten Schritt durchzuführen.
Wenn eine verschachtelte Liste beliebiger nicht negativer Ganzzahlen, die die gewünschte Struktur des Ergebnisses darstellt, und eine flache Liste nicht negativer Ganzzahlen, die die gewünschten Werte darstellen, die flache Liste in die Form der strukturierten Liste umformen. Sie können davon ausgehen, dass beide Listen die gleiche Anzahl von ganzen Zahlen enthalten.
Wie üblich müssen Sie sich nicht mit ungültigen Eingaben befassen (z. B. wenn die zweite Liste nicht flach ist, die Eingabe syntaktisch fehlerhaft ist, keine Ganzzahlen als Knoten usw.). Sie können die Eingabearrays in Ihrem Code ändern.
Sie können eine Funktion oder ein Programm schreiben, indem Sie eine Eingabe über STDIN, ein Befehlszeilenargument oder ein Funktionsargument vornehmen, und Sie können das Ergebnis zurückgeben oder es an STDOUT ausgeben. Sie können jedes beliebige Listen- oder Zeichenfolgenformat verwenden, um die Eingabe und Ausgabe darzustellen (sofern das Format eindeutig ist und die Eingabe nicht vorverarbeitet wurde). Außerdem muss das Format beider Eingaben konsistent sein (sodass Sie eine Eingabe beispielsweise nicht als Zeichenfolge und die andere nicht als Liste verwenden können). Sie können die Eingabelisten in beliebiger Reihenfolge verwenden, geben Sie jedoch in Ihrer Antwort die genaue Eingabemethode an.
Eine weitere Einschränkung: Sie dürfen keine regulären Ausdrücke verwenden. Dies ist eine Array-Manipulationsaufforderung, keine String-Manipulationsaufforderung.
Dies ist Codegolf, daher gewinnt die kürzeste Antwort (in Bytes).
Testfälle
Structure Values Result
[[[1,3],2],[1,4],12,[[0,0],[5,[7]]]] [1,1,0,1,0,0,0,0,1,1] [[[1,1],0],[1,0],0,[[0,0],[1,[1]]]]
[[[0,0],0],[0,0],0,[[0,0],[0,[0]]]] [1,1,0,1,0,0,0,0,1,1] [[[1,1],0],[1,0],0,[[0,0],[1,[1]]]]
[] [] []
[[]] [] [[]]
[0,1,2,3] [5,1,0,5] [5,1,0,5]
[[[[[0]]]]] [123] [[[[[123]]]]]
[0,[1,[]],[[]],[2,3],[]] [1,6,1,8] [1,[6,[]],[[]],[1,8],[]]