OEIS A000009 zählt die Anzahl der strengen Partitionen der ganzen Zahlen. Eine strikte Partition einer nichtnegativen Ganzzahl n
ist eine Menge positiver Ganzzahlen (daher ist keine Wiederholung zulässig, und die Reihenfolge spielt keine Rolle), zu der sich diese Summe zusammensetzt n
.
Zum Beispiel 5 drei strenge Partitionen: 5
, 4,1
, und 3,2
.
10 hat zehn Partitionen:
10
9,1
8,2
7,3
6,4
7,2,1
6,3,1
5,4,1
5,3,2
4,3,2,1
Herausforderung
Geben Sie bei einer nichtnegativen Ganzzahl n
<1000 die Anzahl der festgelegten Partitionen aus.
Testfälle:
0 -> 1
42 -> 1426
Hier ist eine Liste der strengen Partitionsnummern von 0 bis 55 von OEIS:
[1,1,1,2,2,3,4,5,6,8,10,12,15,18,22,27,32,38,46,54,64,76,89,104,122,142,165,192,222,256,296,340,390,448,512,585,668,760,864,982,1113,1260,1426,1610,1816,2048,2304,2590,2910,3264,3658,4097,4582,5120,5718,6378]
Das ist Code-Golf , also gewinnt die kürzeste Lösung in Bytes.
quelle
subsequences
(+import
) gesucht , aber bisher keinen Erfolg gehabt.ES6, 64 Bytes
Funktioniert durch rekursive Versuchssubtraktion.
k
ist die Zahl, die zuletzt subtrahiert wurde, und die nächste zu subtrahierende Zahl muss größer sein (aber nicht so groß, dass eine noch größere Zahl nicht subtrahiert werden kann). 1 wird hinzugefügt, weil Sie sich immern
selbst subtrahieren können. (Da dies auch rekursiv ist, muss ich darauf achten, dass alle meine Variablen lokal sind.)quelle
Python, 68 Bytes
Rufen Sie einfach die anonyme Funktion auf, die die nichtnegative Ganzzahl
n
als Argument übergibt ... und warten Sie auf das Ende des Universums.quelle
n>0
, du sparst ein Byte und gehst schneller (ich glaube du greifst auf negative Zahlen zurück): Preturn sum(...)if n else 1
Python 2, 49 Bytes
Die Rekursion verzweigt sich bei jedem möglichen Summanden
k
ab,1
umn
zu entscheiden, ob sie einbezogen werden soll. Jeder eingeschlossene Summand wird von der gewünschten Summe subtrahiertn
, und am Enden=0
wird dieser Pfad gezählt , falls er verbleibt.quelle
Haskell, 43 Bytes
Die Binärfunktion
n%k
zählt die Anzahl der strengen Partitionenn
in Teile mit einem maximalen Teilk
, daher ist die gewünschte Funktionf n=n%n
. Jeder Wertk
kann enthalten sein, die abnimmt ,n
durchk
oder ausgeschlossen und so oder so die neue maximalk
ist eine untere, die Rekursion zu gebenn%k=n%(k-1)+(n-k)%(k-1)
.quelle
n%k|q<-k-1=n%q+(n-k)%q
rasiert ein Byte von Zeile 3.Julia, 53 Bytes
Dies ist eine anonyme Funktion, die eine Ganzzahl akzeptiert und eine Ganzzahl zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Wir bekommen die ganzzahligen Partitionen
partitions
,filter
die nur diejenigen mit unterschiedlichen Summanden verwenden,collect
in ein Array und finden den letzten Index (dh die Länge), der verwendet wirdendof
.quelle
Haskell, 58 Bytes
Anwendungsbeispiel:
map h [0..10]
->[1,1,1,2,2,3,4,5,6,8,10]
.Es ist ein einfacher Brute-Force-Ansatz. Überprüfen Sie die Summen aller Teilfolgen von
1..x
. Dies funktioniertx == 0
auch, weil alle Teilfolgen von[1..0]
sind[[]]
und die Summe von[]
ist0
.quelle
05AB1E , 8 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
05AB1E , 5 Bytes
Probieren Sie es online!
Hinweis: Dies ist extrem langsam und es tritt eine Zeitüberschreitung bei Eingaben von mehr als etwa 20 auf.
Erläuterung:
quelle