Numéros de partition les plus proches

12

Le nombre de partitions d'un entier est le nombre de façons dont cet entier peut être représenté comme une somme d'entiers positifs.

Par exemple:

5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1

Il existe 7 façons de représenter le nombre 5, donc 7 est le numéro de partition correspondant au nombre 5.

Numéros de partition: OEIS: # A000041

instructions

Écrivez un programme qui prend un entier positif en entrée et génère les deux nombres qui génèrent les deux numéros de partition les plus proches du numéro d'entrée.

  • L'entrée doit être un entier positif.
  • Si l'entrée n'est pas un numéro de partition, la sortie doit être les 2 entiers positifs différents qui génèrent les deux numéros de partition les plus proches du numéro d'entrée. (Si deux numéros de partition sont des candidats égaux pour l'un des numéros de sortie, peu importe celui que vous choisissez.)
  • Si l'entrée est un numéro de partition, la sortie doit être un entier positif qui génère le numéro d'entrée.
  • L'entrée et la sortie peuvent être dans n'importe quel format raisonnable.
  • Vous pouvez supposer que l'entrée ne dépassera pas 100 millions (par exemple, la sortie ne sera jamais supérieure à 95).
  • Les fonctions intégrées pour calculer les numéros de partition ne sont pas autorisées, ainsi que d'autres failles standard .
  • Il s'agit de , donc le moins d'octets gagne.

Numéros de partition: OEIS: # A000041

Exemples

Input: 66
Output: 11, 12

(Les numéros de partition qui correspondent aux numéros 11 et 12 sont 56 et 77, qui sont les deux numéros de partition les plus proches de 66.)

Input: 42
Output: 10

(Le numéro 42 est déjà un numéro de partition, il suffit donc de sortir le numéro qui correspond au numéro de partition.)

Input: 136
Output: 13, 14

(Les deux numéros de partition les plus proches de 136 sont en fait MOINS de 136 (par exemple 101 et 135), par conséquent, la sortie est 13 et 14 par opposition à 14 et 15.)

Input: 1
Output: 0   or   1

(Les deux 0 et 1 sont des sorties valides dans ce cas spécial.)

Input: 2484
Output: 26, 25   or   26, 27

(Ces deux sorties sont valides, parce que 2484 est égal d i la position de 1958 et 3010.)

Input: 4
Output: 3, 4

(Ouaip)

kukac67
la source
Vous n'avez pas défini ce qu'est un numéro de partition
fier haskeller
@proudhaskeller Les numéros de partition sont les numéros qui sont liés dans la séquence OEIS. L'explication du numéro de partition 5est en haut. (J'ajouterai une clarification si vous pensez que ce n'est pas assez clair.)
kukac67
1
Ceci est très proche d'être une dupe de cette question de partition précédente .
Peter Taylor

Réponses:

2

Pyth , 53

L?!b<b1sm&d*^_1tdy-b/*dt*3d2r_bhbJo^-QyN2U99<J-2qQyhJ

Explication et plus de golf à suivre.

isaacg
la source
4

Python 2, 179 octets

Z=range(1,99)
R=Z+[1]
for i in Z:R[i]=sum(-(-1)**k*(3*k*k-k<=i*2and R[i-k*(3*k-1)/2])for k in range(-i,i+1)if k)
f=lambda n:zip(*sorted((abs(n-R[i]),i)for i in Z))[1][:2-(n in R)]

Utilise la formule récursive du théorème pentagonal d' Euler .

Appelez avec f(2484). La sortie est un tuple avec un ou deux nombres.

Sp3000
la source
2

Mathematica, 124 123 octets

f@n_:=(p=SeriesCoefficient[1/Product[1-x^k,{k,#}],{x,0,#}]&;s=SortBy[Range@95,Abs[n-p@#]&];If[p@s[[1]]==n,s[[1]],s~Take~2])

Formule pour les numéros de partition tirée de la page OEIS . (Peut ou peut ne pas tricher ... je ne pouvais pas décider.)

Usage:

In: f[136]

Out: {14, 13}

Je ne réponds pas pour gagner. Et je suis sûr que cela pourrait être approfondi.

kukac67
la source