Wenn Sie ein Programm schreiben, das eine Eingabe von n erhält, werden alle möglichen n-Tupel unter Verwendung natürlicher Zahlen generiert.
n=1
(1),(2),(3),(4),(5),(6)...
n=2
(1,1),(1,2),(2,1),(2,2),(1,3),(3,1),(2,3),(3,2),(3,3)...
n=6
(1,1,1,1,1,1) (1,1,1,1,2,1) (1,1,1,2,1,1)...
- Die Ausgabe kann in einer beliebigen Reihenfolge erfolgen, die keine anderen Regeln verletzt.
- Das Programm muss so geschrieben sein, dass es für immer läuft und theoretisch alle anwendbaren Tupel genau einmal auflistet.
- In Wirklichkeit wird Ihr Programm das Limit Ihres Integer-Typs erreichen und abstürzen. Dies ist akzeptabel , so lange das Programm würde unendlich lange laufen , wenn nur Ihr Integer - Typ war unbegrenzt.
- Jedes gültige Tupel muss innerhalb einer begrenzten Zeit aufgelistet werden, wenn nur das Programm so lange ausgeführt werden darf.
- Die Ausgabe kann optional zusätzlich zu den natürlichen Zahlen auch Nullen enthalten.
- Sie können das Ausgabeformat Ihres Programms nach Belieben auswählen, solange die Trennung zwischen Tupeln und Zahlen in jedem Tupel klar und konsistent ist. (Zum Beispiel ein Tupel pro Zeile.)
- Die Eingabe (n) ist eine ganze Zahl von eins bis sechs. Das erforderliche Verhalten ist für Eingaben außerhalb dieses Bereichs nicht definiert.
- Es gelten die Code-Golf-Regeln, das kürzeste Programm gewinnt.
Vielen Dank an "Artemis Fowl" für das Feedback während der Sandbox-Phase.
Antworten:
Schale , 2 Bytes
Probieren Sie es online!
Erläuterung
N
ist die unendliche Liste natürlicher Zahlen[1,2,3,4,..
.π
ist kartesische Kraft. Ergebnis ist eine unendliche Liste von Listen. Jede Liste der gewünschten Länge kommt genau einmal vor, weil dasπ
so cool ist. Eingabe und Ausgabe sind implizit.quelle
n
- Tupel werden erhalten, indem das kartesische Produkt der ursprünglichen Liste und der Liste dern-1
Tupel in aufsteigender Reihenfolge der Summe der Indizes genommen wird.2,2,2
nach4,1,2
und kommt5,1,1
.N
. Für 2-Tupel verwenden Sie ein kartesisches ProduktN
, das nach der Summe der Indizes sortiert ist. In beiden Listen befindet sich jede Zahln
im Index,n
sodass das Ergebnis für die Länge 2 zufällig nach der Summe sortiert ist. Um 3-Tupel zu erhalten, nehmen Sie das kartesische Produkt vonN
und die Liste der 2-Tupel, geordnet nach der Summe der Indexe der Elemente in diesen Listen. Es wird nicht die Tupelsumme angezeigt, sondern die Position in der Tupelliste.Haskell , 62 Bytes
Probieren Sie es online!
n!s
generiert allen
-tupel, die zusammengerechnet werdens
.Dann lautet die Antwort
([1..]>>=).(!)
, das heißt\n -> [t | s<-[1..], t<-n!s]
.Dies ist eine Funktion, die eine Ganzzahl
n
einer unendlichen Liste fauler Tupel (Listen ganzer Zahlen) zuordnet.quelle
Haskell , 50 Bytes
Probieren Sie es online!
Listet
n
Tupel sortiert nach Summe auf.mapM
tut das schwere Heben, um allen
Tupel von Zahlen von 0 bis k zu erzeugen . Der<$f
Trick wird hier erklärt .Haskell , 51 Bytes
Probieren Sie es online!
n-1
Spannt rekursiv alle -Tupel in allen
-Tupel, indem die erste Zahla
jedesn-1
-Tupelsa-k,k
auf jede mögliche Weise in zwei Zahlen aufgeteilt wird , die sich daraus ergeben.quelle
Pyth - 9 Bytes
Vielen Dank an @FryAmTheEggman für das Golfen
Durchläuft alle x und nimmt [1..x] ^ n. Dadurch werden Duplikate erstellt, sodass nur diejenigen erhalten bleiben, die für dieses x neu sind, also auch x enthalten. Die Formatierung ist etwas seltsam, kann aber mit einem weiteren Byte zum Standard gemacht werden.
.V1j}#b^Sb
Probieren Sie es online aus .
quelle
f}bT
->}#b
Auch Ihre Byteanzahl scheint im Moment falsch zu sein?j(b)
. Danke auch für den Golf.Brachylog (v2), 9 Bytes
Probieren Sie es online!
Dies ist ein unendlicher Generator, der alle möglichen Tupel generiert. Der TIO-Link hat einen Header, der den Generator verwendet, um 1000 Elemente zu generieren und diese zu drucken (aber der Generator könnte auf unbestimmte Zeit fortgesetzt werden, wenn ich stattdessen danach frage; Brachylogs ganze Zahlen sind unbegrenzt).
Es fühlt sich so an, als ob es einen engeren Weg geben sollte, aber es gibt eine Menge Einschränkungen und dies ist der engere Weg, den ich für ein einziges Programm finden kann.
Erläuterung
Im Übrigen finde ich es interessant, wie unterschiedlich meine Erklärungen der beiden
≜
sind, obwohl sie aus Brachylogs Sicht genau dasselbe tun. Das erste≜
ist das erste nicht deterministische Prädikat im Programm, daher legt es die Reihenfolge der Ergebnisse fest. In diesem Fall berechnet es alle möglichen expliziten Werte für die Summe der Liste in der Reihenfolge 0, 1, 2, 3 ... und wird verwendet, um sicherzustellen, dass die Listen in der Reihenfolge ihrer Summe ausgegeben werden (dies stellt sicher, dass jedes möglich ist Liste erscheint nach einer begrenzten Anzahl von Ausgaben). Die zweite≜
Methode berechnet alle expliziten Möglichkeiten für die Liste (anstatt eine Formel auszugeben, die angibt, wie sich die Elemente der Liste zueinander verhalten).quelle
↰₁ẉ⊥
ist auch ein guter Header, um unendlich zu drucken.ᶠ
oder⊥
im Header ausgeführt wird.Perl 6 , 37 Bytes
Probieren Sie es online!
polymod
Läuft im Wesentlichen mit so vielen Einträgen wie nötig, wobei das Modulo immer größer als der Eingang ist, dh 0.polymod (1,1,1), 1.polymod (2,2,2) usw. Auf diese Weise befindet sich die Ziffer immer innerhalb die Reichweite. Perl6 lässt mich nicht unendlich Modulo ...quelle
(0, 1, 0, 0)
nicht aufgelistet).Wolfram Language (Mathematica) , 62 Byte
Probieren Sie es online!
-3 Bytes mit inkonsistenter Trennung (löschen
@#&
)Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 148 Byte
Probieren Sie es online!
-3 Bytes dank @ASCIIOnly!
quelle
Write
mit zB'<literal tab>'
oder|
ist die gleiche Länge und nimmt viel weniger ZeilenJelly , 10 (9?) Bytes
9 wenn wir mit einer nicht konsistenten Trennung ausgeben dürfen (über die ich nachgefragt habe) - Entfernen der
€
.Probieren Sie es online!
Wie?
quelle
€
erforderlich ist, aber warten wir, was OP zu tun hat sagen.05AB1E ,
1511 Bytes-4 Bytes durch Erstellen eines Ports von @Maltysens Pyth-Antwort .
Probieren Sie es online aus.
Erläuterung:
quelle
MATL , 16 Bytes
Tupel werden nach zunehmender Summe geordnet und innerhalb einer gegebenen Summe lexikographisch geordnet.
Probieren Sie es online!
quelle
Python 2 ,
12611210610110083 BytesProbieren Sie es online!
5 bytes thx zu mypetlion ; 1 Byte vom Adlerauge von ArBo ; 17 Bytes von xnor !
Konstruieren Sie die geordneten Partitionen von
m
inn
Bins,m = 0,1,2,3,...
indem Sie mitn-1
0
s undm
1
s Binärzahlen auswählen .quelle
if i==p:i=0;p*=2
kann werdeni%=p;p<<=i<1
, um 5 Bytes zu sparen.print b
nicht benötigt wird: Di+p
nur 1, 2, 3 ... auf verschlungene Weise hochzählen und kann daher nur eine einzelne Variable sein.C # (.NET Core) ,
608 570567 BytesProbieren Sie es online!
Mein Gott, was habe ich getan (so viele Loops, das habe ich getan)
Es sollte aber funktionieren!
Wenn Sie die Druckschleife um eine Klammer nach hinten verschieben, wird die Liste bei jeder Schleife angezeigt. (Ich empfehle, eine neue Zeile oder etwas hinzuzufügen, um jede Schleife zu unterscheiden, wenn Sie dies tun.)
Ehrlich gesagt, ich habe viel Zeit damit verbracht, mit der Sprache zu kämpfen ... keine hübschen Arrays, verschiedene Verhaltensweisen von == ...
Hoffentlich ist diese Version leichter zu lesen.
quelle
Perl 6 , 50 Bytes
Probieren Sie es online!
Anonymer Codeblock, der eine faule unendliche Liste zurückgibt. Dies verwendet dieselbe Strategie wie die Antwort von Chas Brown .
Erläuterung:
quelle
VDM-SL , 51 Bytes
Rekursives Mengenverständnis mit Sequenzverkettung.
Nicht auf TIO können Sie in einem Programm ausgeführt werden (wenn Sie die Grenzwerte für den nat-Typ aktivieren oder das Programm nicht beendet wird):
Schließt die optionalen Nullen in die Antwort ein, andernfalls wären es 52 Bytes, die an nat1 binden
quelle
Wolfram Language (Mathematica) , 131 Byte
Probieren Sie es online!
quelle
Perl -M5.010 122 Bytes
Aus Gründen der Lesbarkeit wurden einige neue Zeilen hinzugefügt (nicht in der Byteanzahl enthalten)
quelle
Python 2 , 120 Bytes
Probieren Sie es online!
Ein bisschen länger als die meisten anderen Antworten, aber mir hat die Idee dahinter gefallen.
quelle
Stax , 6 Bytes
Führen Sie es aus und debuggen Sie es
Für die Eingabe
n
ist das Verfahren grobquelle
JavaScript (V8) , 98 Byte
Probieren Sie es online!
Hurra! Endlich unter 100 :) Grundsätzlich ein Port meiner C # Antwort .
quelle