OEIS A000009 compte le nombre de partitions strictes des entiers. Une partition stricte d'un entier non négatif n
est un ensemble d'entiers positifs (donc aucune répétition n'est autorisée, et l'ordre n'a pas d'importance) qui somme n
.
Par exemple, 5 a trois partitions strictes: 5
, 4,1
et 3,2
.
10 a dix partitions:
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
Défi
Étant donné un entier non négatif n
<1000, affichez le nombre de partitions strictes dont il dispose.
Cas de test:
0 -> 1
42 -> 1426
Voici une liste des numéros de partition stricts de 0 à 55, d'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]
Il s'agit de code-golf , donc la solution la plus courte en octets l'emporte.
la source
subsequences
(+import
) dans ma réponse, mais je n'ai pas réussi jusqu'à présent.ES6, 64 octets
Fonctionne par soustraction d'essai récursive.
k
est le nombre qui a été soustrait en dernier, et le nombre suivant à soustraire doit être plus grand (mais pas si grand qu'un nombre encore plus grand ne peut pas être soustrait). 1 est ajouté car vous pouvez toujours vous soustrairen
. (De plus, comme c'est récursif, je dois veiller à ce que toutes mes variables soient locales.)la source
Python, 68 octets
Appelez simplement la fonction anonyme en passant l'
n
argument non négatif comme argument ... et attendez la fin de l'univers.la source
n>0
, vous enregistrez un octet et allez plus vite (je crois que vous recurse sur les nombres négatifs): Preturn sum(...)if n else 1
Python 2, 49 octets
La récursivité se branche à chaque sommation potentielle
k
de1
àn
pour décider si elle doit être incluse. Chaque somme incluse est soustraite de la somme souhaitéen
, et à la fin, s'iln=0
reste, ce chemin est compté.la source
Haskell, 43 octets
La fonction binaire
n%k
compte le nombre de partitions strictes den
en parties avec une partie maximalek
, donc la fonction souhaitée estf n=n%n
. Chaque valeurk
peut être inclus, ce qui diminuen
park
, ou exclue, et de toute façon le nouveau maximumk
est une inférieure, ce qui donne la récursionn%k=n%(k-1)+(n-k)%(k-1)
.la source
n%k|q<-k-1=n%q+(n-k)%q
rase un octet de la ligne 3.Julia, 53 octets
Il s'agit d'une fonction anonyme qui accepte un entier et renvoie un entier. Pour l'appeler, affectez-le à une variable.
Nous obtenons les partitions entières en utilisant
partitions
,filter
uniquement celles avec des sommets distincts,collect
dans un tableau, et trouvons le dernier index (c'est-à-dire la longueur) en utilisantendof
.la source
Haskell, 58 octets
Exemple d'utilisation:
map h [0..10]
->[1,1,1,2,2,3,4,5,6,8,10]
.C'est une approche simple par force brute. Vérifiez les sommes de toutes les sous-séquences de
1..x
. Cela fonctionnex == 0
aussi parce que toutes les sous-séquences de[1..0]
are[[]]
et la somme de[]
is0
.la source
05AB1E , 8 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source
05AB1E , 5 octets
Essayez-le en ligne!
Remarque: ceci est extrêmement lent et expirera pour les entrées supérieures à environ 20.
Explication:
la source