Verschachtelte Sequenzen repräsentieren ein willkürliches Zusammenführen einer Anzahl von Sequenzen.
Eine verschachtelte Sequenz kann durch Anhängen von Elementen an eine Liste nacheinander aus einer bestimmten Anzahl von Listen erstellt werden, wobei jedes Mal das nächste Element aus einer bestimmten Liste ausgewählt wird. Daher enthält eine verschachtelte Sequenz genau die gleichen Elemente aller kombinierten Listen in einer Reihenfolge, die mit allen Listen übereinstimmt.
Die einzige Verschachtelung von 1 Liste ist dieselbe Liste.
Herausforderung
Ihre Herausforderung besteht darin, eine Funktion / ein Programm zu erstellen, das eine beliebige Anzahl von Sequenzen annimmt und alle möglichen Verschachtelungen dieser Sequenzen ausgibt.
Beispiele
Input: [1, 2], [3, 4]
Output:
[1, 2, 3, 4]
[1, 3, 2, 4]
[1, 3, 4, 2]
[3, 1, 2, 4]
[3, 1, 4, 2]
[3, 4, 1, 2]
Input: [1, 2, 3, 4, 5]
Output:
[1, 2, 3, 4, 5]
Input: []
Output:
[]
Input: <nothing>
Output:
[]
(also acceptable)
Input: <nothing>
Output: <nothing>
Input: [1, 2, 3], [4, 5]
Output:
[1, 2, 3, 4, 5]
[1, 2, 4, 3, 5]
[1, 2, 4, 5, 3]
[1, 4, 2, 3, 5]
[1, 4, 2, 5, 3]
[1, 4, 5, 2, 3]
[4, 1, 2, 3, 5]
[4, 1, 2, 5, 3]
[4, 1, 5, 2, 3]
[4, 5, 1, 2, 3]
Input: [1, 2], [3, 4], [5, 6]
Output:
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 5, 4, 6]
[1, 2, 3, 5, 6, 4]
[1, 2, 5, 3, 4, 6]
[1, 2, 5, 3, 6, 4]
[1, 2, 5, 6, 3, 4]
[1, 3, 2, 4, 5, 6]
[1, 3, 2, 5, 4, 6]
[1, 3, 2, 5, 6, 4]
[1, 3, 4, 2, 5, 6]
[1, 3, 4, 5, 2, 6]
[1, 3, 4, 5, 6, 2]
[1, 3, 5, 2, 4, 6]
[1, 3, 5, 2, 6, 4]
[1, 3, 5, 4, 2, 6]
[1, 3, 5, 4, 6, 2]
[1, 3, 5, 6, 2, 4]
[1, 3, 5, 6, 4, 2]
[1, 5, 2, 3, 4, 6]
[1, 5, 2, 3, 6, 4]
[1, 5, 2, 6, 3, 4]
[1, 5, 3, 2, 4, 6]
[1, 5, 3, 2, 6, 4]
[1, 5, 3, 4, 2, 6]
[1, 5, 3, 4, 6, 2]
[1, 5, 3, 6, 2, 4]
[1, 5, 3, 6, 4, 2]
[1, 5, 6, 2, 3, 4]
[1, 5, 6, 3, 2, 4]
[1, 5, 6, 3, 4, 2]
[3, 1, 2, 4, 5, 6]
[3, 1, 2, 5, 4, 6]
[3, 1, 2, 5, 6, 4]
[3, 1, 4, 2, 5, 6]
[3, 1, 4, 5, 2, 6]
[3, 1, 4, 5, 6, 2]
[3, 1, 5, 2, 4, 6]
[3, 1, 5, 2, 6, 4]
[3, 1, 5, 4, 2, 6]
[3, 1, 5, 4, 6, 2]
[3, 1, 5, 6, 2, 4]
[3, 1, 5, 6, 4, 2]
[3, 4, 1, 2, 5, 6]
[3, 4, 1, 5, 2, 6]
[3, 4, 1, 5, 6, 2]
[3, 4, 5, 1, 2, 6]
[3, 4, 5, 1, 6, 2]
[3, 4, 5, 6, 1, 2]
[3, 5, 1, 2, 4, 6]
[3, 5, 1, 2, 6, 4]
[3, 5, 1, 4, 2, 6]
[3, 5, 1, 4, 6, 2]
[3, 5, 1, 6, 2, 4]
[3, 5, 1, 6, 4, 2]
[3, 5, 4, 1, 2, 6]
[3, 5, 4, 1, 6, 2]
[3, 5, 4, 6, 1, 2]
[3, 5, 6, 1, 2, 4]
[3, 5, 6, 1, 4, 2]
[3, 5, 6, 4, 1, 2]
[5, 1, 2, 3, 4, 6]
[5, 1, 2, 3, 6, 4]
[5, 1, 2, 6, 3, 4]
[5, 1, 3, 2, 4, 6]
[5, 1, 3, 2, 6, 4]
[5, 1, 3, 4, 2, 6]
[5, 1, 3, 4, 6, 2]
[5, 1, 3, 6, 2, 4]
[5, 1, 3, 6, 4, 2]
[5, 1, 6, 2, 3, 4]
[5, 1, 6, 3, 2, 4]
[5, 1, 6, 3, 4, 2]
[5, 3, 1, 2, 4, 6]
[5, 3, 1, 2, 6, 4]
[5, 3, 1, 4, 2, 6]
[5, 3, 1, 4, 6, 2]
[5, 3, 1, 6, 2, 4]
[5, 3, 1, 6, 4, 2]
[5, 3, 4, 1, 2, 6]
[5, 3, 4, 1, 6, 2]
[5, 3, 4, 6, 1, 2]
[5, 3, 6, 1, 2, 4]
[5, 3, 6, 1, 4, 2]
[5, 3, 6, 4, 1, 2]
[5, 6, 1, 2, 3, 4]
[5, 6, 1, 3, 2, 4]
[5, 6, 1, 3, 4, 2]
[5, 6, 3, 1, 2, 4]
[5, 6, 3, 1, 4, 2]
[5, 6, 3, 4, 1, 2]
Regeln
- Standardlücken verboten (duh)
- Die Eingabe kann in jedem vernünftigen Format erfolgen, z. B. als Liste von Listen, Vararg-Liste von Listen, Parameterlisten usw., sofern eindeutig festgelegt ist, wo Listen beginnen und enden.
- Die Ausgabe kann in jedem vernünftigen Format erfolgen, sofern klar ist, wo Listen beginnen und enden. Gültige Ausgaben sind unter anderem:
- stdout mit einer Liste pro Zeile
- Eine Liste von Listen
- Ein Iterator über Listen (kann mit einem Generator implementiert werden, wenn Ihre Sprache sie hat)
- Die Reihenfolge der erhaltenen Verschachtelungen spielt keine Rolle, es sollten jedoch keine wiederholten Verschachtelungen auftreten.
- Um die Wiederholungserkennung zu vereinfachen, können Sie davon ausgehen, dass alle Elemente in allen Eingabesequenzen eindeutig sind.
- Wenn keine Listen als Eingabe angegeben werden, sind sowohl die leere Liste als auch keine Ausgabe gültige Ausgaben.
- Die Typen der Elemente in den Sequenzen sind irrelevant. (ZB können sie alle ein Typ oder ein Mischmasch von Typen sein, je nachdem, was in Ihrer Sprache praktischer ist.)
- Es muss garantiert sein, dass Ihr Programm / Ihre Funktion auf unbestimmte Zeit endet.
- Das ist Code-Golf , also gewinnt der kürzeste Code für jede Sprache.
[[]]
anstatt[]
dass wir keine Listen als Eingabe erhalten?Antworten:
Haskell ,
847776 BytesVielen Dank an @Lynn für 7 Bytes und @ user9549915 für ein Byte!
Probieren Sie es online!
quelle
Python 2 ,
103927978 BytesProbieren Sie es online!
Oder:
Python 3 , 73 Bytes
Probieren Sie es online!
-1 durch Ersetzen
[x[0]]
durchx[:1]
gemäß xnor-13 Bytes durch
schamloses Stehlen derErweiterung,[b[b==x:]for b in A]
wie es Neils Antwort andeutet , anstelle einer längerenenumerate
Annäherung.Nimmt eine Liste von Listen
A
als Eingabe. Sind alle Elemente vonA
leer, so ist die im ausgewertete Listeif
leer, damit wir das Ende der Rekursion erreicht haben und könnenprint
. Ansonsten haben wir eine Liste von einem oder mehrerenNone
; und wir rekursieren.quelle
[x[0]]
isx[:1]
Jelly , 11 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Ruby, 66 Bytes
Wenn keine nicht leeren Sequenzen vorhanden sind, geben Sie eine leere Sequenz zurück. Andernfalls wiederholen Sie für jede nicht leere Sequenz das Entfernen des ersten Elements und fügen es am Anfang jedes Ergebnisses hinzu. Bei der Implementierung wird davon ausgegangen, dass Elemente garantiert global eindeutig sind, andernfalls
a-[b]
kann möglicherweise mehr als eine Sequenz aus dem rekursiven Aufruf entfernt werden. Vielleicht ist dies tatsächlich das richtige Verhalten, um doppelte Ausgaben zu vermeiden.Beispiel IO:
f[[[1,2],[3,4]]] => [[1, 3, 2, 4], [1, 3, 4, 2], [1, 2, 3, 4], [3, 1, 4, 2], [3, 1, 2, 4], [3, 4, 1, 2]]
quelle
Wolfram Language (Mathematica) ,
767571 BytesProbieren Sie es online!
Naiver Ansatz: Finde alle Permutationen, die Verschachtelungen der Eingabe sind.
Erläuterung
Machen Sie flach
<input>
und finden Sie alle Permutationen.Finde alle Elemente
x
so, dass ...Ersetzen Sie alle Elemente in Tiefe 2
<input>
durch ihre jeweilige Position inx
.Überprüfen Sie, ob alle Listen der Tiefe 1 sortiert sind (dh in aufsteigender Reihenfolge).
Tatsächliche Implementierung der Verschachtelung, 117 Bytes
Probieren Sie es online!
quelle
Python 2 ,
8784 BytesProbieren Sie es online! Port meiner JavaScript-Antwort. Bearbeiten: 3 Bytes dank @ChasBrown gespeichert.
quelle
sum(a,[])
durchany(a)
.sum(a,[])
hat jedoch in einigen Situationen eine gute Verwendung!Haskell , 45 Bytes
Probieren Sie es online!
Adaptiert von Chas Browns Python-Antwort .
Dies
max[[]]
ist ein Trick, um einen Basisfall anzugeben,[[]]
bei dem die Eingabe nur[]
Elemente enthält . In diesem Fall ist die Liste für leer, rekursiv leer undmax[[]][]
gibt[[]]
.Wenn wir das erste Element der ausgewählten Liste rekursiv nicht selektiv löschen, erstellen
h:t
wir eine neue Liste mitt
vorne undh:t
filtern sie heraus.quelle
JavaScript (Firefox 30-57), 92 Byte
quelle
Japt
-Q
, 14 BytesNimmt Eingaben als Array von Arrays.
-Q
Lässt die Ausgabe die Array-Notation beibehalten.Probieren Sie es hier aus.
quelle
Scala: (soll nicht minimal sein, eher eine klare Referenzressource)
Probieren Sie es online!
quelle