Ich habe es genossen, diese Seite zu lesen. das ist meine erste frage Änderungen sind willkommen.
Berechnen Sie bei positiven Ganzzahlen n und m alle geordneten Partitionen von m in genau n Teile positive Ganzzahlenteile und drucken Sie sie durch Kommas und Zeilenumbrüche getrennt aus. Jede Bestellung ist in Ordnung, aber jede Partition muss genau einmal erscheinen.
Zum Beispiel sind bei m = 6 und n = 2 mögliche Partitionen Paare von positiven ganzen Zahlen, die sich zu 6 summieren:
1,5
2,4
3,3
4,2
5,1
Beachten Sie, dass [1,5] und [5,1] unterschiedlich angeordnete Partitionen sind. Die Ausgabe sollte genau das oben angegebene Format haben und optional einen Zeilenumbruch enthalten. (BEARBEITEN: Die genaue Reihenfolge der Partitionen spielt keine Rolle). Die Eingabe / Ausgabe ist über Standard - Code-Golf - I / O .
Eine weitere Beispielausgabe für m = 7, n = 3:
1,1,5
1,2,4
2,1,4
1,3,3
2,2,3
3,1,3
1,4,2
2,3,2
3,2,2
4,1,2
1,5,1
2,4,1
3,3,1
4,2,1
5,1,1
Der kleinste Code in Bytes nach 1 Woche gewinnt.
Auch hier bitte bei Bedarf nachbearbeiten.
Nachtrag:
@TimmyD fragte, welche Größe der Integer-Eingabe das Programm unterstützen soll. Es gibt kein hartes Minimum jenseits der Beispiele; Tatsächlich nimmt die Ausgabegröße exponentiell zu, grob modelliert durch: lines = e ^ (0.6282 n - 1.8273).
n | m | lines of output
2 | 1 | 1
4 | 2 | 2
6 | 3 | 6
8 | 4 | 20
10 | 5 | 70
12 | 6 | 252
14 | 7 | 924
16 | 8 | 3432
18 | 9 | 12870
20 | 10 | 48620
22 | 11 | 184756
24 | 12 | 705432
Antworten:
Pyth, 14 Bytes
Probieren Sie es online aus: Demo oder Test Suite
Erläuterung:
quelle
jjL\,fqsTQ^SQE
.Python 3, 77 Bytes
Eine rekursive Funktion, die jede Ausgabezeichenfolge erstellt und druckt. Versucht jede mögliche erste Zahl, rekursiv, um eine Lösung mit der entsprechenden verringerten Summe
n
und einem Summanden wenigerm
und einem Zeichenfolgepräfixs
mit dieser Zahl zu finden. Wenn sowohl die erforderliche Summe als auch die Anzahl der Terme gleich 0 sind, haben wir die Marke erreicht und drucken das Ergebnis aus, wobei das Anfangskomma abgeschnitten wird. Dies wird alsm|n
0 (Falsey) geprüft .79 Zeichen in Python 2:
quelle
CJam, 22 Bytes
Probieren Sie es online im CJam-Interpreter aus .
Wie es funktioniert
quelle
Pyth,
20 bis18 Bytes-2 Bytes von @Dennis!
Dies ist
n
die erste undm
die zweite Eingabezeile .Probieren Sie es hier aus .
quelle
Haskell, 68 Bytes
Anwendungsbeispiel:
So funktioniert es:
sequence $ replicate n list
Erstellt alle Kombinationen vonn
Elementen gezeichneter Formlist
. Wir nehmen alle solchex
von[1..m]
wo dassum
gleichm
.unlines
undinit$tail$show
das gewünschte Ausgabeformat erzeugen.quelle
Dyalog APL , 33 Bytes
Nimmt
m
als linkes Argument,n
als rechtes Argument.Fast die Hälfte (zwischen
{
und⍺
) ist für die erforderliche Formatierung.quelle
Mathematica, 65 Bytes
IntegerPartitions
erledigt die Aufgabe. Der Rest ist nur die Tupel zu bestellen und das Ergebnis zu formatieren.quelle
Python 3, 112
Ich habe seit einiger Zeit keinen Einzeiler mehr geschafft. :)
quelle
Python 2.7,
174170152 BytesFette Antwort. Zumindest ist es lesbar :)
quelle
>
, nachreplace
und nach dem Komma entfernen .Julia, 105 Bytes
Dies ist eine Funktion, die zwei Ganzzahlargumente liest und die Ergebnisse mit einem einzelnen Zeilenvorschub nach STDOUT schreibt.
Ungolfed:
quelle
Perl 6 , 54 Bytes
Wenn die Ausgabe eine Liste von Listen sein könnte
Wie es derzeit heißt, muss ich
join
dem Lambda einen hinzufügen .quelle