Setumpuk kartu adalah produk S
jas dan R
pangkat Cartesian . Banyak, meskipun tidak semua, permainan kartu menggunakan S=4
dan R∊{6,8,13}
. Satu tangan H
kartu dibagikan dari geladak. Its distribusi , alias "pola tangan", adalah sebuah array yang menggambarkan berapa banyak kartu Anda dapatkan dari masing-masing sesuai, mengabaikan perintah suit (jadi, itu seperti multi-set). Mengingat distribusi D
memuaskan len(D)=S
, 1≤sum(D)=H≤S×R
, 0≤D[i]≤R
, D[i]≥D[i+1]
, menemukan kemungkinan itu terjadi.
Input: integer R
dan array D
.
Output: probabilitas dengan setidaknya 5 digit setelah tanda desimal; nol tertinggal dapat dilewati; notasi ilmiah tidak apa-apa.
Celah terlarang. Kemenangan terpendek.
Tes:
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
Lihat juga pola jembatan tangan di Wikipedia .
EDIT: menjatuhkan batasan yang tidak perlu H≤R
EDIT: kendala tambahan H≥1
Jawaban:
APL (Dyalog Unicode) , 30 karakter
Cobalah online!
Menggunakan rumus @ orlp .
sumber
Python 3, 134 byte
Formula adalah produk
binom(R, d)
untuk setiap elemend
dalamD
, kalifactorial(len(D))
, dibagi dengan produkfactorial(len(S))
untuk masing-masingS
dalam pengelompokanD
(misalnya[4, 4, 3, 2]
memiliki pengelompokan[[4, 4], [3], [2]]
), akhirnya dibagi olehbinom(len(D) * R, sum(D))
.Atau dalam notasi matematika, anggap m berisi banyaknya elemen n unik dalam D :
sumber
i=0
berartib()
dan kegunaanR,D
untukn,k
).R ,
908583 byteCobalah online!
Saya mengamati hal yang sama dengan orlp , tetapi saya memilih bahasa yang bagus yang memiliki kombinatorik bawaan.
Penjelasan:
sumber
"<"=choose
(di luar fungsi) dan berpotensi menggunakan seq tergantung pada jawaban ngn untuk komentar yang saya posting pagi ini.Jelly ,
2220 byte-2 byte menggunakan cepat baru
ʋ
,, dan atom monadik baruẈ
Sebuah link diad, mengambil distribusi-ditangani, D, di sebelah kiri dan jumlah peringkat, R, di sebelah kanan, yang mengembalikan probabilitas terjadinya.
Cobalah online! atau lihat test-suite
Bagaimana?
sumber
05AB1E , 21 byte
Cobalah online!
Penjelasan
sumber
Pyth , 32 byte
Coba di sini! atau Verifikasi semua test case!
Bagaimana ini bekerja?
sumber
APL (Dyalog) , 42 byte
Cobalah online!
Masih bermain golf.
sumber
Clojure, 153 byte
Hanya simulasi brute-force, untuk mendapatkan presisi yang lebih baik, hitung jumlah iterasi dan nilai "1 / N" pada akhirnya. Argumen pertama adalah jumlah dan argumen ke-2 adalah jumlah kartu di dek per suite.
sumber
J, 57 byte
Cobalah online!
Ini berjalan di O (golf) dan akan tersedak banyak kasus uji (meskipun bekerja secara teoritis), yang akan baik-baik saja jika itu golfier. Tapi saya terjebak memotongnya, terutama dengan menghindari yang berulang
"1
. Jika ada yang ingin membantu, inilah versi yang diuraikan ...Sisi kanan garpu utama adalah semua penawaran yang mungkin dari dek , dan sisi kiri garpu utama adalah hanya arg tepat asli, yaitu, gugatan topeng kita pencocokan sedang melawan.
Di dalam, dari setiap dek "dikocok", kami mengambil elemen tangan pertama , lalu mengelompokkannya menggunakan kunci
/.
dan mengurutkan hasilnya, dan memeriksa apakah itu cocok dengan topeng setelan yang dimaksud. Kami menambahkan menjumlahkan jumlah total yang cocok, dan membaginya menjadi panjang semua deck yang mungkin.sumber
f=:(([:!#)%[:*/[:!#/.~)@]**/@(]![)%+/@]![*#@]
TIO