Una baraja de cartas es el producto cartesiano de S
palos y R
rangos. Muchos, aunque no todos, usan juegos de cartas S=4
y R∊{6,8,13}
. Se H
reparte una mano de cartas del mazo. Su distribución , también conocida como "patrón de mano", es una matriz que describe cuántas cartas obtuviste de cada palo, ignorando el orden del palo (por lo tanto, es como un conjunto múltiple). Dada una distribución de D
satisfacer len(D)=S
, 1≤sum(D)=H≤S×R
, 0≤D[i]≤R
, D[i]≥D[i+1]
, encontrar la probabilidad de que ocurra.
Entrada: un entero R
y una matriz D
.
Salida: la probabilidad con al menos 5 dígitos después de la marca decimal; se pueden omitir los ceros finales; La notación científica está bien.
Lagunas prohibidas. Las victorias más cortas.
Pruebas:
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
Vea también Patrones de mano de puente en Wikipedia .
EDITAR: se eliminó la restricción innecesaria H≤R
EDITAR: restricción añadida H≥1
Respuestas:
APL (Dyalog Unicode) , 30 caracteres
Pruébalo en línea!
Usando la fórmula de @ orlp .
fuente
Python 3, 134 bytes
La fórmula es el producto de
binom(R, d)
para cada elementod
enD
, tiemposfactorial(len(D))
, dividido por el producto defactorial(len(S))
para cada unoS
en las agrupaciones deD
(por ejemplo,[4, 4, 3, 2]
tiene agrupaciones[[4, 4], [3], [2]]
), finalmente dividido porbinom(len(D) * R, sum(D))
.O en notación matemática, suponiendo que m contiene las multiplicidades de los n elementos únicos en D :
fuente
i=0
para significarb()
y usaR,D
paran,k
).R ,
908583 bytesPruébalo en línea!
Observé lo mismo que orlp , pero elegí un lenguaje agradable que tiene incorporados combinatorios.
Explicación:
fuente
"<"=choose
(fuera de la función) y potencialmente usar seq dependiendo de la respuesta de ngn al comentario que publiqué esta mañana.Jalea ,
2220 bytes-2 bytes usando un nuevo rápido
ʋ
, y un nuevo átomo monádicoẈ
Un enlace diádico, tomando la distribución repartida, D, a la izquierda y el número de rangos, R, a la derecha, que devuelve la probabilidad de ocurrencia.
Pruébalo en línea! o ver el conjunto de pruebas
¿Cómo?
fuente
05AB1E , 21 bytes
Pruébalo en línea!
Explicación
fuente
Pyth , 32 bytes
Pruébalo aquí! o Verifique todos los casos de prueba!
¿Cómo funciona esto?
fuente
APL (Dyalog) , 42 bytes
Pruébalo en línea!
Todavía jugando al golf.
fuente
Clojure, 153 bytes
Solo una simulación de fuerza bruta, para obtener más precisión, aumente el recuento de iteraciones y el valor "1 / N" al final en consecuencia. El primer argumento es el recuento y el segundo argumento es el número de cartas en el mazo por suite.
fuente
J, 57 bytes
Pruébalo en línea!
Esto se ejecuta en O (golf) y se ahogará en muchos de los casos de prueba (aunque funciona teóricamente), lo que estaría bien si fuera más golfista. Pero estoy atascado en recortarlo, especialmente para evitar que se repitan
"1
. Si alguien quiere ayudar, aquí está la versión analizada ...El lado derecho de la bifurcación principal es todas las ofertas posibles de la baraja , y el lado izquierdo de la bifurcación principal es solo el argumento derecho original, es decir, la máscara de traje con la que estamos haciendo coincidir.
En el interior, de cada mazo "barajado", tomamos los elementos de primera mano , luego los agrupamos con la llave
/.
y clasificamos el resultado, y verificamos si eso coincide con la máscara del traje en cuestión. Agregamos sumamos el número total que coinciden, y lo dividimos en la longitud de todas las barajas posibles.fuente
f=:(([:!#)%[:*/[:!#/.~)@]**/@(]![)%+/@]![*#@]
TIO