Seorang teman memiliki kartu tambahan di komputer mereka yang menghasilkan angka acak sempurna dari 1 hingga 5 inklusif. Sayangnya, mereka menumpahkan cola di atasnya, dan sekarang hanya menghasilkan 2 untuk semua angka dari 1 hingga 4. Untungnya keacakan dipertahankan, tetapi 2 memiliki probabilitas 80% dan 5 memiliki probabilitas 20%, dan tidak ada 1, 3 atau 4 dihasilkan. Dengan menggunakan sumber acak ini (sebut saja BrokenRand()
atau sejenisnya), tulis generator angka acak yang berfungsi yang menghasilkan angka dari 1 hingga 5 masing-masing dengan probabilitas 20% sama dengan keacakan sempurna yang sama dengan sumber aslinya.
Kemenangan program terpendek. Poin bonus diberikan untuk jumlah panggilan minimum yang tidak BrokenRand
memihak oleh konsultan fokus layanan pelanggan yang dipilih secara demografis, yang dirinci menurut usia dan jenis kelamin - yaitu saya.
sumber
scala 79 chars:
Sekarang untuk golf asli, defektRNG alias brokenRand diubah namanya menjadi b.
Cara kerjanya: Paling sering, b mengembalikan urutan 2s. Tetapi jika Anda melakukan 5 panggilan ke b, Anda akan sering berakhir dengan hasil 4x2 dan 1x5, ini adalah acara yang paling mungkin kedua, dan bisa 5-2-2-2-2, 2-5-2-2 -2, 2-2-5-2-2, 2-2-2-5-2 dan 2-2-2-2-5.
Ini memiliki kesamaan, bahwa jumlahnya adalah 4 * 2 + 5 = 13. Indeks lima pertama dapat digunakan untuk menentukan angka acak yang valid. Jika ada lebih atau kurang dari satu 5, jumlah yang lebih besar atau lebih rendah 13, ulangi.
Penghitung di 'rnd' alias 'r' dapat menunjukkan berapa banyak panggilan yang diperlukan secara rata-rata untuk menghasilkan nomor. Ada 121 200 panggilan ke r untuk 50.000 nomor acak, yang tidak mengesankan. :)
sumber
> <> (Ikan) - 55 byte
Diperbarui untuk menggunakan algoritma yang sama dengan @user yang tidak dikenal dalam jawaban skala-nya
Diharapkan generator yang rusak terhubung ke stdin; inilah skrip python yang saya gunakan . Kode cocok dengan spesifikasi Ikan saat ini, tetapi saya menggunakan versi penerjemah lama yang sudah dimodifikasi .
Saya akan melakukan sampel yang lebih besar tetapi lambat.
sumber
GolfScript, 23 byte
Jawaban terlambat, tetapi karena ini kebetulan muncul di halaman depan ...
Menggunakan algoritma yang sama dengan solusi Scala yang tidak diketahui pengguna . Diasumsikan bahwa generator nomor acak yang bias diberikan sebagai subrutin GolfScript bernama
r
; Anda dapat menentukan sendiri RNG yang bias misalnya:Berikut ini adalah tes cepat yang menunjukkan kurangnya bias. Sayangnya, server GolfScript online agak lambat, jadi saya harus memotong demonstrasi menjadi hanya 100 sampel agar selesai tepat waktu. Jika menjalankan tes secara lokal dengan interpreter GolfScript , coba tingkatkan
100*
ke1000*
atau bahkan10000*
.(Server GolfScript juga kadang-kadang membeku secara acak dan waktu habis. Jika ini terjadi untuk Anda, mencoba lagi biasanya menyelesaikannya. Ini terjadi dengan kode lain juga, dan hanya terjadi di server, bukan di komputer saya sendiri, jadi saya yakin bahwa itu masalah dengan server dan bukan dengan kode saya.)
sumber
javascript, 160 karakter tanpa mengurangi pembacaan alias optimasi
sumber
BrockenBand()
itu?BrockenRand
function giveRandom(){return Math.ceil(Math.random()*5)}