In dieser Aufgabe erhalten Sie eine ungerade Anzahl weißer Kugeln und die gleiche Anzahl schwarzer Kugeln. Die Aufgabe besteht darin, alle Arten des Einlegens der Kugeln in Behälter zu zählen, so dass in jedem Behälter eine ungerade Anzahl jeder Farbe vorhanden ist.
Nehmen wir zum Beispiel an, wir haben 3 weiße Kugeln. Die verschiedenen Möglichkeiten sind:
(wwwbbb)
(wb)(wb)(wb)
für die zwei verschiedenen Möglichkeiten.
Wenn wir 5 weiße Kugeln haben, gibt es verschiedene Möglichkeiten:
(wwwwwbbbbb)
(wwwbbb)(wb)(wb)
(wwwb)(wbbb)(wb)
(wb)(wb)(wb)(wb)(wb)
Sie können die Eingabe, die eine einzelne Ganzzahl ist, beliebig übernehmen. Die Ausgabe ist nur eine einzelne Ganzzahl.
Ihr Code muss schnell genug sein, damit Sie ihn für 11 weiße Kugeln vollständig gesehen haben.
Sie können jede Sprache oder Bibliothek verwenden, die Sie mögen.
:)
Antworten:
Pari / GP, 81 Bytes
Für mehr Effizienz, ersetzen
1+
mit1+O(x^(n+1))+O(y^(n+1))+
(der ersteO
Begriff allein hilft schon viel).Probieren Sie es online aus! (frühere 86-Byte-Version mit einem Paar nicht benötigter Parens und ohne
p=
Abkürzung)Alte Version, 90 Bytes
Computing
f(11)
benötigt eine größere Stapelgröße. In der Fehlermeldung erfahren Sie, wie Sie diese erhöhen können. Es ist effizienter (aber weniger Golfy) , die beide zu ersetzen ,n
die als zweites Argument scheinenprod
mit(n-1)/2
.quelle
(n-1)/2
?Python 3, 108 Bytes
Listet alle Sätze rekursiv auf und stellt sicher, dass keine Duplikate erstellt werden, indem die Sätze immer in der richtigen Reihenfolge generiert werden. Ziemlich schnell, wenn mit gespeichert
C = functoools.lru_cache(None)(C)
, aber dies ist nicht notwendig fürn = 11
.Rufen Sie
C(num_white, num_black)
an, um Ihr Ergebnis zu erhalten. Erste paar vonn
:So generieren Sie die Ergebnisse:
ZB für (7, 7):
quelle
Python 3 ,
180172 BytesProbieren Sie es online aus!
Einfache Implementierung der Erzeugungsfunktion. Lang aber (etwas) effizient. O (n 4 ) Zeit, O (n 2 ) Speicher.
Das resultierende Array
a
enthält alle Ergebnisse aller Größen bis zun
, obwohl nura[n][n]
zurückgegeben wird.quelle
Python 2 ,
168181 BytesProbieren Sie es online aus!
quelle
n
enthält die Eingabe). Sie sollten entweder hinzufügendef f(n):
odern=input()
(um es zu einer Funktion bzw. einem vollständigen Programm zu machen)a
kann seineval(`[[0]*n]*n`)
(wo`
steht fürrepr
).