Un jeu de cartes est le produit cartésien des S
couleurs et des R
rangs. De nombreux jeux de cartes, mais pas tous, utilisent S=4
et R∊{6,8,13}
. Une main de H
cartes est distribuée depuis le jeu. Sa distribution , alias "motif de main", est un tableau qui décrit le nombre de cartes que vous avez obtenues de chaque couleur, en ignorant l'ordre des couleurs (donc, c'est comme un multi-set). Compte tenu d' une distribution D
satisfaisant len(D)=S
, 1≤sum(D)=H≤S×R
, 0≤D[i]≤R
, D[i]≥D[i+1]
, trouver la probabilité qu'il se produise.
Entrée: un entier R
et un tableau D
.
Sortie: la probabilité avec au moins 5 chiffres après la virgule décimale; les zéros de fin peuvent être ignorés; la notation scientifique est correcte.
Échappatoires interdites. Victoires les plus courtes.
Tests:
R D probability
13 4 4 3 2 -> 0.2155117564516334148528314355068773
13 5 3 3 2 -> 0.1551684646451760586940386335649517
13 9 3 1 0 -> 0.0001004716813294328274372174524508
13 13 0 0 0 -> 0.0000000000062990780897964308603403
8 3 2 2 1 -> 0.4007096203759162602321667950144035
8 4 2 1 1 -> 0.1431105787056843786543452839337155
8 2 2 1 0 -> 0.3737486095661846496106785317018910
8 3 1 1 0 -> 0.2135706340378197997775305895439377
15 4 4 3 2 1 -> 0.1428926269185580521441708109954798
10 3 0 0 -> 0.0886699507389162561576354679802956
10 2 1 0 -> 0.6650246305418719211822660098522167
10 1 1 1 -> 0.2463054187192118226600985221674877
Voir aussi Modèles de main de pont dans Wikipedia .
EDIT: suppression d'une restriction inutile H≤R
EDIT: contrainte supplémentaire H≥1
Réponses:
APL (Dyalog Unicode) , 30 caractères
Essayez-le en ligne!
Utilisation de la formule de @ orlp .
la source
Python 3, 134 octets
La formule est le produit de
binom(R, d)
pour chaque élémentd
dansD
, foisfactorial(len(D))
, divisé par le produit defactorial(len(S))
pour chacunS
dans les regroupements deD
(par exemple,[4, 4, 3, 2]
a des regroupements[[4, 4], [3], [2]]
), finalement divisé parbinom(len(D) * R, sum(D))
.Ou en notation mathématique, en supposant que m contient les multiplicités des n éléments uniques dans D :
la source
i=0
pour signifierb()
et utiliseR,D
pourn,k
).R ,
908583 octetsEssayez-le en ligne!
J'ai observé la même chose que orlp , mais j'ai choisi un joli langage qui a des intégrations combinatoires.
Explication:
la source
"<"=choose
(en dehors de la fonction) et potentiellement utiliser seq en fonction de la réponse de ngn au commentaire que j'ai posté ce matin.Gelée ,
2220 octets-2 octets en utilisant un nouvel
ʋ
atome rapide et un nouvel atome monadiqueẈ
Un lien dyadique, prenant la distribution distribuée, D, à gauche et le nombre de rangs, R, à droite, qui renvoie la probabilité d'occurrence.
Essayez-le en ligne! ou voir la suite de tests
Comment?
la source
05AB1E , 21 octets
Essayez-le en ligne!
Explication
la source
Pyth , 32 octets
Essayez-le ici! ou Vérifiez tous les cas de test!
Comment ça marche?
la source
APL (Dyalog) , 42 octets
Essayez-le en ligne!
Toujours au golf.
la source
Clojure, 153 octets
Juste une simulation de force brute, pour obtenir plus de précision, augmentez le nombre d'itérations et la valeur "1 / N" à la fin en conséquence. Le premier argument est le nombre et le deuxième argument est le nombre de cartes dans le jeu par suite.
la source
J, 57 octets
Essayez-le en ligne!
Cela fonctionne en O (golf) et étouffera de nombreux cas de test (bien que fonctionne théoriquement), ce qui serait bien si c'était plus golfeur. Mais je suis coincé à le réduire, surtout en évitant ceux répétés
"1
. Si quelqu'un veut aider, voici la version analysée ...Le côté droit de la fourche principale est toutes les offres possibles du jeu , et le côté gauche de la fourche principale est juste l'argument de droite d'origine, c'est-à-dire le masque de combinaison auquel nous correspondons.
À l'intérieur, à partir de chaque deck "mélangé", nous prenons les éléments de première main , puis les regroupons à l'aide de la clé
/.
et trions le résultat, et vérifions si cela correspond au masque de costume en question. Nous additionnons le nombre total qui correspond et divisons cela en la longueur de tous les ponts possibles.la source
f=:(([:!#)%[:*/[:!#/.~)@]**/@(]![)%+/@]![*#@]