Tugas Anda adalah menulis program atau fungsi yang menghasilkan n
angka acak dari interval [0,1] dengan jumlah tetap s
.
Memasukkan
n, n≥1
, jumlah angka acak untuk dihasilkan
s, s>=0, s<=n
, jumlah angka yang akan dihasilkan
Keluaran
n
Double- acak angka floating point dengan semua elemen dari interval [0,1] dan jumlah semua elemen sama dengan s
, output dengan cara yang jelas dan nyaman. Semua n
-tuple yang valid harus memiliki kemungkinan yang sama dalam batasan angka floating point.
Ini sama dengan pengambilan sampel secara seragam dari persimpangan titik-titik di dalam n
kubus unit -dimensi dan n-1
hyperplane -dimensi yang melewati (s/n, s/n, …, s/n)
dan tegak lurus terhadap vektor (1, 1, …, 1)
(lihat area merah pada Gambar 1 untuk tiga contoh).
Gambar 1: Bidang output yang valid dengan n = 3 dan jumlah 0,75, 1,75 dan 2,75
Contohnya
n=1, s=0.8 → [0.8]
n=3, s=3.0 → [1.0, 1.0, 1.0]
n=2, s=0.0 → [0.0, 0.0]
n=4, s=2.0 → [0.2509075946818119, 0.14887693388076845, 0.9449661625992032, 0.6552493088382167]
n=10, s=9.999999999999 → [0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999,0.9999999999999]
Aturan
- Program Anda harus selesai di bawah satu detik pada mesin Anda setidaknya dengan
n≤10
dan s yang valid. - Jika diinginkan, program Anda dapat eksklusif di ujung atas, yaitu
s<n
dan nomor output dari interval setengah terbuka [0,1) (melanggar contoh kedua) - Jika bahasa Anda tidak mendukung angka floating point, Anda dapat memalsukan output dengan setidaknya sepuluh digit desimal setelah titik desimal.
- Celah standar tidak diizinkan dan metode input / output standar diizinkan.
- Ini adalah kode-golf , sehingga entri terpendek, diukur dalam byte, menang.
This is equal to uniformly sampling from the intersection
- saya dapat melihat program memilih secara acak hanya dari sudut persimpangan itu. Apakah itu valid?
s==0 or s==3
. Untuk semua nilai lainnya s
, bidang memiliki bidang nol dan Anda harus memilih titik pada bidang tersebut secara acak.
s=2.99999999999, n=3
? Bisakah kita menghasilkan real acak dalam kelipatan, katakanlah 1e-9
,?