Étant donné une liste d'entiers, affichez le nombre de permutations des entiers, les permutations indiscernables étant comptées une fois. S'il y a des n
entiers et que chaque groupe de nombres indiscernables a une longueur n_i
, c'estn! / (n_1! * n_2! * ...)
Règles
L'entrée sera une forme de liste comme arguments d'une fonction ou du programme avec 1 à 12 entiers non négatifs.
La sortie sera l'impression ou le retour du nombre de permutations comme décrit ci-dessus.
Pas de failles standard ni de fonctions intégrées (génération de permutations, combinaisons, etc.). Les factoriels sont autorisés.
Cas de test
Contributions:
1, 3000, 2, 2, 8
1, 1, 1
2, 4, 3, 2, 3, 4, 4, 4, 4, 4, 1, 1
Les sorties:
60
1
83160
Réponses:
Python, 48 octets
Une implémentation récursive.
Dans la formule,
n! / (n_1! * n_2! * ...)
si nous supprimons le premier élément (disons que c'est1
), le nombre de permutation pour lesn-1
éléments restants estDonc, nous obtenons la réponse en multipliant par
n/n1
, la fraction réciproque des éléments qui égalent le premier, par le résultat récursif pour le reste de la liste. La liste vide donne le cas de base de 1.la source
/l.count(l[0])
à la fin? Ensuite, vous n'avez pas besoin de cette virgule flottante icky.MATL ,
141312 octetsEssayez-le en ligne!
Explication
L'approche est très similaire à celle de la réponse de @ Adnan .
la source
05AB1E ,
151413 octetsCode:
Explication:
Utilise l' encodage CP-1252 .
Essayez-le en ligne! .
la source
JavaScript (ES6),
6461 octetsUtilise la formule donnée, sauf pour calculer chaque factorielle de façon incrémentielle (ainsi, par exemple, le
r=r*++i
calcule efficacementn!
).Edit: à l'origine, j'ai accepté tous les nombres finis, mais j'ai enregistré 3 octets lorsque @ user81655 a souligné que je n'avais besoin que de prendre en charge des entiers positifs (bien que j'accepte en fait des entiers non négatifs).
la source
r*=++i/(x-y?(y=x,c=1):++c),y=r=-1)|-r
?*=
bien car cela introduit des erreurs d'arrondi.Pyth, 11 octets
Suite de tests
Utilise la formule standard
n! / (count1! * count2! * ...)
, sauf que les factorielles des décomptes sont trouvées en comptant combien de fois chaque élément apparaît dans le préfixe menant à cela, puis en multipliant tous ces nombres ensemble.Explication:
la source
Pyth -
1412 octetsSuite de tests .
la source
Rubis,
7574 octetsJ'aimerais un peu que le
Math
module de Ruby ait une fonction factorielle donc je n'ai pas eu à construire la mienne.la source
CJam, 17 octets
Testez-le ici.
Explication
la source
Gelée, 8 octets
Essayez-le en ligne!
la source
J, 13 octets
Usage
Explication
la source