J'ai aimé lire ce site; c'est ma première question. Les modifications sont les bienvenues.
Étant donné les entiers positifs n et m , calculez toutes les partitions ordonnées de m en exactement n parties parties entières positives et imprimez-les délimitées par des virgules et des sauts de ligne. Toute commande est correcte, mais chaque partition doit apparaître exactement une fois.
Par exemple, étant donné m = 6 et n = 2, les partitions possibles sont des paires d'entiers positifs qui se résument à 6:
1,5
2,4
3,3
4,2
5,1
Notez que [1,5] et [5,1] sont des partitions ordonnées différentes. La sortie doit être exactement dans le format ci-dessus, avec une nouvelle ligne de fin facultative. (EDIT: l'ordre exact des partitions n'a pas d'importance). Les entrées / sorties se font via des E / S de code-golf standard .
Un autre exemple de sortie pour m = 7, n = 3:
1,1,5
1,2,4
2,1,4
1,3,3
2,2,3
3,1,3
1,4,2
2,3,2
3,2,2
4,1,2
1,5,1
2,4,1
3,3,1
4,2,1
5,1,1
Le plus petit code en octets après 1 semaine gagne.
Encore une fois, veuillez modifier si nécessaire.
Addenda:
@TimmyD a demandé quelle taille d'entrée entière le programme doit prendre en charge. Il n'y a pas de minimum strict au-delà des exemples; en effet, la taille de sortie augmente de façon exponentielle, grossièrement modélisée par: lines = e ^ (0,6282 n - 1,8273).
n | m | lines of output
2 | 1 | 1
4 | 2 | 2
6 | 3 | 6
8 | 4 | 20
10 | 5 | 70
12 | 6 | 252
14 | 7 | 924
16 | 8 | 3432
18 | 9 | 12870
20 | 10 | 48620
22 | 11 | 184756
24 | 12 | 705432
Réponses:
Pyth, 14 octets
Essayez-le en ligne: démonstration ou suite de tests
Explication:
la source
jjL\,fqsTQ^SQE
.Python 3, 77 octets
Une fonction récursive qui construit chaque chaîne de sortie et l'imprime. Essaie chaque premier nombre possible, en revenant vers le bas pour trouver une solution avec la somme diminuée correspondante
n
, et un summand de moinsm
, et un préfixe de chaînes
avec ce nombre. Si la somme requise et le nombre de termes sont égaux à 0, nous avons frappé la marque, donc nous imprimons le résultat, en coupant la virgule initiale. Ceci est vérifié commem|n
étant 0 (Falsey).79 caractères dans Python 2:
la source
CJam, 22 octets
Essayez-le en ligne dans l' interpréteur CJam .
Comment ça fonctionne
la source
Pyth,
2018 octets-2 octets par @Dennis!
Cela prend
n
comme première ligne d'entrée etm
comme seconde.Essayez-le ici .
la source
Haskell, 68 octets
Exemple d'utilisation:
Comment ça marche:
sequence $ replicate n list
crée toutes les combinaisons d'n
éléments dessinés sous formelist
. Nous prenons tous cesx
d'[1..m]
où l'sum
égalm
.unlines
etinit$tail$show
produire le format de sortie requis.la source
Dyalog APL , 33 octets
Prend
m
comme argument de gauche,n
comme argument de droite.Près de la moitié (entre
{
et⍺
) correspond à la mise en forme requise.la source
Mathematica, 65 octets
IntegerPartitions
fait la tâche. Le reste consiste simplement à ordonner les tuples et à formater le résultat.la source
Python 3, 112
Je n'ai pas réussi un liner depuis un moment. :)
la source
Python 2.7,
174170152 octetsGrosse réponse. Au moins c'est lisible :)
la source
>
, aprèsreplace
et après la virgule.Julia, 105 octets
Il s'agit d'une fonction qui lit deux arguments entiers et écrit les résultats dans STDOUT avec un seul saut de ligne.
Non golfé:
la source
Perl 6 , 54 octets
Si la sortie peut être une liste de listes
La façon dont il est actuellement libellé, je dois ajouter un
join
dans le lambda.la source