Le théorème des nombres polygonaux de Fermat stipule que chaque entier positif peut être exprimé comme la somme d'au plus -gonaux. Cela signifie que chaque entier positif peut être exprimé comme la somme d'un maximum de trois nombres triangulaires, quatre nombres carrés, cinq nombres pentagonaux, etc. Votre tâche consiste à prendre un entier positif et un entier , et à générer -entiers régionaux qui totalisent .
Le ème entier régional, où et , peut être défini de deux manières. Le non-math-y voie est que la ième nombre -gonal peut être réalisé sous la forme d' un polygone régulier à côtés, chacune de longueur . Par exemple, pour (nombres triangulaires):
Voir ici pour des exemples avec un plus grand .
La définition mathématique est en utilisant la formule pour , qui donne le ème -nombre régional:
qui est donné dans la page Wikipedia ici .
Contribution
Deux entiers positifs, et , avec la condition . Vous pouvez entrer ces nombres entiers dans la représentation la plus naturelle de votre langue (décimal, unaire, chiffres d'église, nombres à virgule flottante à valeur entière, etc.).
Production
Une liste de nombres entiers, , d'une longueur maximale de , où la somme de est égale à et tous les entiers de sont nombres entiers -gonal. Encore une fois, les entiers peuvent être sortis dans la représentation naturelle de votre langue, avec n'importe quel séparateur distinct et cohérent (donc des caractères non décimaux pour la sortie décimale, un caractère différent de celui utilisé pour la sortie unaire, etc.)
Règles
- Les entrées ou sorties ne dépasseront jamais la limite entière pour votre langue
- ne doit pas être commandé
- En cas de sorties multiples possibles, tout ou partie est acceptable
- C'est le code-golf donc le code le plus court en octets gagne
Cas de test
x, s => L
1, s => 1
2, s => 1, 1
5, 6 => 1, 1, 1, 1, 1
17, 3 => 1, 6, 10
17, 4 => 1, 16
17, 5 => 5, 12
36, 3 => 36
43, 6 => 15, 28
879, 17 => 17, 48, 155, 231, 428
4856, 23 => 130, 448, 955, 1398, 1925
la source
x=17, s=5
pourrions produire5,12,0,0,0
au lieu de simplement5,12
?Q
à ma soumission?Réponses:
Haskell ,
78 8077 octetsNous calculons le produit cartésien desn premiers nombres s-gonaux, puis trouvons la première entrée qui résume à n .
Essayez-le en ligne!
la source
JavaScript (ES6),
8380 octetsUne recherche récursive rapide qui maximise le plus petit terme de la sortie.
Prend l'entrée comme
(s)(x)
.Essayez-le en ligne!
Formule
Il s'avère plus court d'utiliser une formule basée sur 0 pour calculer les nombress -gonaux dans JS, c'est-à-dire pour commencer avec n = 0 et pour calculer P( n + 1 , s ) :
qui peut être écrit en 14 octets:
Commenté
la source
05AB1E ,
1413 octetsRéponse de Jelly du port de Jonathan Allan .
Essayez-le en ligne!
la source
Haskell , 55 octets
Essayez-le en ligne!
Produit toutes les solutions possibles. Définit les nombres s-gonaux comme la somme cumulée de la progression arithmétique
la source
Gelée , 17 octets
Un lien dyadique (très très inefficace) acceptant
s
à gauche etx
à droite qui donne la réponse la plus courte possible sous forme de liste d'entiers (triés par ordre croissant).Essayez-le en ligne! - pas grand chose à essayer pour des valeurs beaucoup plus élevées!
Comment?
la source
⁸
Rubis , 79 octets
Essayez-le en ligne!
la source
Python 3 , 105 octets
Essayez-le en ligne!
Réponse JavaScript de Port of Arnauld , alors assurez-vous de lui donner un vote positif!
la source
Rétine , 111 octets
Essayez-le en ligne! Le lien inclut des cas de test. Prend entrée dans l'ordre
s n
. Explication:Convertissez en unaire.
Après avoir traité les étapes restantes, traitez-les comme un programme Retina et exécutez-les sur la même entrée.
Dupliquez la ligne.
Remplacez la première copie par une expression régulière qui saute le premier nombre et correspond ensuite aux
s
s
nombres -gonal. Les nombres eux-mêmes sont capturés dans des groupes de capture impairs et les groupes de capture pairs sont utilisés pour garantir que tous les nombres sonts
-gonaux.Remplacez la deuxième copie par une liste séparée par des espaces des groupes de capture impairs.
Par exemple, le code généré pour une entrée de
5 17
est le suivant:la source
APL (NARS), 149 caractères, 298 octets
sinon trouver des solutions "0 = ≢b" que retourner pour (ns) entrée, n fois 1; sinon il retournerait la somme des nombres s qui a moins d'addend ...
tester:
Le problème de cela: il ne trouve pas de solution a un certain nombre de répétition dans la somme ...
la source
C ++ (clang) , 198 octets
Essayez-le en ligne!
la source