Erstellen Sie einen Code, der eine Liste und eine Nummer als Eingabe verwendet und alle möglichen Kombinationen mit der Länge der Nummer generiert. Zum Beispiel mit der Liste {0,1} und der Nummer 2 :
00
01
10
11
Ihr Programm muss nicht zweimal oder öfter Zeichen in der Liste erwarten, z. B. {0,0,0,0,0,1,1,5,5}.
Stellen Sie sicher, dass Sie die Kombinationen sortiert in der Reihenfolge der Liste ausdrucken:
Mit der Liste {0,1} und der Nummer 5 (generiert durch einen Teil meines Codes, der viel zu lang ist, um zu gewinnen):
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
10010
10011
10100
10101
10110
10111
11000
11001
11010
11011
11100
11101
11110
11111
Aber mit der Liste {1,0} und der Nummer 2 :
11
10
01
00
Wie Sie sehen, bedeutet umgekehrte Liste umgekehrte Reihenfolge.
Schauen Sie sich die Struktur an, sie ist wie ein Baum.
Das ist Code-Golf, also gewinnt der kürzeste Code in Bytes!
Antworten:
Gelee , 1 Byte
TryItOnline
In die kartesische Kraft eingebautes Atom, als dyadische Verknüpfung mit dem linken Argument die Elemente und dem rechten Argument die Anzahl oder als vollständiges Programm mit dem ersten Argument die Elemente und dem zweiten Argument die Anzahl.
quelle
Haskell, 20 Bytes
Anwendungsbeispiel:
replicate
Erstelltn
Kopien des 2. Parameters und erstelltmapM id
die Kombinationen. ÜbrigensmapM id
ist das gleiche wiesequence
, aber 1 Byte weniger.quelle
MATL , 2 Bytes
Kartesische Kraft ...
Probieren Sie es online!
quelle
Pyth, 2 Bytes
Ein Programm, das Eingaben in das Formular übernimmt
list,number
und eine Liste von Listen druckt.Testsuite
Wie es funktioniert
quelle
Perl 6 , 15 Bytes
Erläuterung:
quelle
JavaScript (Firefox 30+), 55 Byte
Ich bin mir zu 99% sicher, dass Rekursion der beste Weg ist, dies in JavaScript zu tun.
quelle
Perl, 30 Bytes
28 Byte Code +
-nl
Flag.Um es auszuführen:
Ich denke, dass die Eingabe als Liste von Zahlen für Perl logisch ist. Wenn wir jedoch etwas Phantasie zulassen und die Eingabe mit Klammern und Komma übernehmen (wie in der Frage gezeigt), können wir auf 20 Bytes zurückgehen :
Erklärungen:
glob
In Perl wird der ursprüngliche Zweck darin gesehen, Dateinamen aufzulisten und zu durchlaufen. Wenn das Argument jedoch geschweifte Klammern enthält, werden Kombinationen generiert, die aus einem Element jeder Klammergruppe bestehen.-a
Automatische Teilung der Eingabe durch Leerzeichen und Platzierung des Ergebnisses innerhalb des@F
Arrays.$"
ist das Listentrennzeichen: Es ist das Trennzeichen, das zwischen den Elementen einer Liste in einer Zeichenfolge eingefügt wird. Wir setzen es auf,
, also"{@F"}
produziert{.,.}
(falls@F
0 und 1 enthalten).Ist
x
dann der Operator für die Zeichenfolgenwiederholung (und<>
erhält eine Eingabezeile).Zum Schluss wird
say for
die vonglob
den Elementen erzeugte Liste durchlaufen und gedruckt.quelle
Mathematica, 6 Bytes
Noch schlimmer als Jelly :(
Verwendung
quelle
Python, 57 Bytes
repl.it
Unbenannte Funktion, die eine Liste von Objekten
o
und eine Anzahl aufnimmtn
und eine Liste der Kombinationen zurückgibt.quelle
Pure Bash, 36
Eingabe über Befehlszeilenparameter - Die Liste ist eine durch Kommas getrennte Liste in geschweiften Klammern, z.
Beachten Sie, dass die Eingabeliste in Anführungszeichen gesetzt werden muss, damit die aufrufende Shell sie nicht zu früh erweitert.
Ideone .
quelle
bash a.sh "{0,1}" 2
->{0,1}{0,1}
(version 4.4.5 (1) -release)R ,
5345 BytesProbieren Sie es online!
rev
ist da, um die genaue Sortierreihenfolge einzuhalten (was für das Problem nicht wirklich wesentlich zu sein scheint) und fügt 5 Bytes hinzu.quelle
rev
für 45 Bytes :)Schläger 123 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
PHP, 109 Bytes
Nimmt die Länge als erstes Argument und die Liste als weiteres Argument.
Verwenden Sie wie:
Wird auf einen "out of memory" -Fehler stoßen, wenn nach Länge 0 gefragt wird.
quelle
05AB1E ,
21 Bytes-1 Byte danke an @Enigma .
Probieren Sie es online aus.
Eingabe als
number\nlist
, Ausgabe als Listenliste.Erläuterung:
quelle
I
hier nicht.I
weil ich anfangs versuchte, herauszufinden, wie man mehrere Eingaben hat, und die Nummer und die Liste vertauscht hatte. Ziemlich doof dasI
da zu halten .. Danke!