Talia kart to kartezjański produkt w S
kolorach i R
szeregach. Wiele, choć nie wszystkie, używa gier karcianych S=4
i R∊{6,8,13}
. Układ H
kart jest rozdawany z talii. Jego rozkład , zwany również „wzorem ręki”, jest tablicą, która opisuje liczbę kart, które otrzymałeś z każdego koloru, ignorując kolejność kolorów (więc jest to jak zestaw wielokrotny). Biorąc pod uwagę rozkład D
satysfakcjonujące len(D)=S
, 1≤sum(D)=H≤S×R
, 0≤D[i]≤R
, D[i]≥D[i+1]
, znaleźć prawdopodobieństwo jej wystąpienia.
Dane wejściowe: liczba całkowita R
i tablica D
.
Wyjście: prawdopodobieństwo, że co najmniej 5 cyfr po znaku dziesiętnym; końcowe zera mogą być pomijane; notacja naukowa jest w porządku.
Luki zabronione. Najkrótsze wygrane.
Testy:
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
Zobacz także Most wzory ręcznie w Wikipedii .
EDYCJA: usunięto niepotrzebne ograniczenia H≤R
EDYCJA: dodano ograniczenie H≥1
Odpowiedzi:
APL (Dyalog Unicode) , 30 znaków
Wypróbuj online!
Korzystanie z formuły @ orlp .
źródło
Python 3, 134 bajty
Formula jest iloczynem
binom(R, d)
każdego elementud
wD
czasiefactorial(len(D))
, podzielonym przez iloczynfactorial(len(S))
każdegoS
z grupD
(np.[4, 4, 3, 2]
Ma grupy[[4, 4], [3], [2]]
), ostatecznie podzielonych przezbinom(len(D) * R, sum(D))
.Lub w notacji matematycznej, zakładając, że m zawiera krotność n unikalnych elementów w D :
źródło
i=0
na myślib()
i używaR,D
nan,k
).R ,
908583 bajtówWypróbuj online!
Obserwowałem to samo co orlp , ale wybrałem fajny język, który ma wbudowane kombinatoryki.
Wyjaśnienie:
źródło
"<"=choose
(poza funkcją) i potencjalnie użyć sekw. W zależności od odpowiedzi ngn na komentarz, który opublikowałem dziś rano.Galaretka ,
2220 bajtów-2 bajty przy użyciu nowego szybkiego
ʋ
i nowego atomu monadycznegoẈ
Diadadicowe połączenie, biorąc rozkład zadany, D, po lewej i liczbę stopni, R, po prawej, co zwraca prawdopodobieństwo wystąpienia.
Wypróbuj online! lub zobacz zestaw testowy
W jaki sposób?
źródło
05AB1E , 21 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
Pyth , 32 bajty
Wypróbuj tutaj! lub Zweryfikuj wszystkie przypadki testowe!
Jak to działa
źródło
APL (Dyalog) , 42 bajty
Wypróbuj online!
Wciąż gra w golfa.
źródło
Clojure, 153 bajty
Tylko symulacja brutalnej siły, aby uzyskać większą precyzję, odpowiednio zwiększ liczbę iteracji i wartość „1 / N” na końcu. Pierwszy argument to liczby, a drugi argument to liczba kart w talii na zestaw.
źródło
J, 57 bajtów
Wypróbuj online!
Działa to w trybie O (golf) i dusi wiele przypadków testowych (choć działa teoretycznie), co byłoby w porządku, gdyby były bardziej golfowe. Ale utknąłem przy przycinaniu go, szczególnie z unikaniem tych powtarzających się
"1
. Jeśli ktoś chce pomóc, oto przeanalizowana wersja ...Prawa strona głównego rozwidlenia to wszystkie możliwe oferty talii , a lewa strona głównego rozwidlenia to tylko oryginalny prawy argument, tj. Maska koloru, z którą się dopasowujemy.
Wewnątrz, z każdej „tasowanej” talii, bierzemy elementy z pierwszej ręki , następnie grupujemy je za pomocą klucza
/.
i sortujemy wynik, i sprawdzamy, czy pasuje do danej maski koloru. Dodajemy całkowitą liczbę pasujących elementów i dzielimy ją na długość wszystkich możliwych talii.źródło
f=:(([:!#)%[:*/[:!#/.~)@]**/@(]![)%+/@]![*#@]
TIO