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
nDouble- 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 nkubus unit -dimensi dan n-1hyperplane -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≤10dan s yang valid. - Jika diinginkan, program Anda dapat eksklusif di ujung atas, yaitu
s<ndan 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,?
