Kekeliruan penjudi adalah bias kognitif di mana kita secara keliru mengharapkan hal-hal yang sering terjadi lebih kecil kemungkinannya terjadi di masa depan dan hal-hal yang tidak terjadi dalam beberapa saat untuk lebih mungkin terjadi segera. Tugas Anda adalah mengimplementasikan versi spesifik ini.
Penjelasan Tantangan
Tulis fungsi yang mengembalikan bilangan bulat acak antara 1 dan 6, inklusif. Tangkapan: pertama kali fungsi dijalankan, hasilnya harus seragam (dalam 1%), namun, setiap panggilan berikutnya akan condong ke nilai yang telah digulirkan lebih sedikit kali sebelumnya. Rincian spesifiknya adalah sebagai berikut:
- Die mengingat jumlah angka yang dihasilkan sejauh ini.
- Setiap hasil ditimbang dengan rumus berikut:
- Misalnya, jika jumlah roll sejauh ini adalah , bobotnya adalah , artinya Anda akan menjadi 4 kali lebih mungkin untuk menggulung dari .
- Perhatikan bahwa rumus tersebut berarti bahwa hasil gulungan ditimbang sama dengan
Aturan dan Asumsi
- Aturan I / O standar dan celah terlarang berlaku
- Gulungan die tidak boleh bersifat deterministik. (yaitu menggunakan PRNG yang diunggulkan dari sumber yang mudah menguap, seperti biasanya tersedia sebagai builtin.)
- Sumber acak Anda harus memiliki periode setidaknya 65535 atau benar-benar acak.
- Distribusi harus dalam 1% untuk berat hingga 255
- RNG 16-bit cukup baik untuk memenuhi kedua persyaratan di atas. Sebagian besar RNG built-in sudah cukup.
- Anda dapat meneruskan distribusi saat ini selama distribusi tersebut dimutasi oleh panggilan atau distribusi post-roll dikembalikan bersama dengan die roll. Memperbarui distribusi / jumlah adalah bagian dari tantangan ini .
- Anda dapat menggunakan bobot alih-alih menghitung. Saat melakukannya, setiap kali berat turun ke 0, semua bobot harus naik 1 untuk mencapai efek yang sama dengan jumlah penyimpanan.
- Anda bisa menggunakan bobot ini sebagai pengulangan elemen dalam array.
Semoga berhasil. Semoga byte selalu menguntungkan Anda.
Jawaban:
R , 59 byte
Cobalah online!
Menyimpan hitungan
T
, yang kemudian diubah untuk digunakan sebagaiweights
argumensample
(yang kemungkinan besar akan menormalkan jumlah mereka1
).The
[<<-
operator yang digunakan untuk memberikan nilai padaT
di salah satu lingkungan orang tua (dalam hal ini, satu-satunya lingkungan induk.GlobalEnv
).sumber
T
? (Selain membuat kode lebih sulit dibaca!)T
atau secaraF
internal ke fungsi, dan kemudian saya terlalu malas untuk mengubahnya begitu saya menyadari bahwa saya membutuhkan penugasan global.pawl
.Python 3 ,
11299 byteCobalah online!
Penjelasan
Sunting: Disimpan 13 byte. Terima kasih, attinat !
sumber
c,=
and dropping[0]
). Juga perlu dicatat bahwachoices
Python 3.6+05AB1E , 13 byte
Cobalah online!
Mengambil daftar jumlah sebagai input. Menghasilkan gulungan dan jumlah baru.
Penjelasan:
sumber
JavaScript (ES8), 111 byte
Cobalah online!
Bagaimana?
Ini adalah implementasi yang agak naif dan paling mungkin suboptimal yang melakukan simulasi seperti yang dijelaskan.
sumber
APL (Dyalog Unicode) , 32 byte SBCS
-4 byte menggunakan replikasi bukan indeks interval.
Cobalah online!
Didefinisikan sebagai fungsi yang mengambil distribusi saat ini sebagai argumen, mencetak die roll yang dihasilkan, dan mengembalikan distribusi yang diperbarui. Jalankan pertama pada TIO adalah 100 doa dimulai dengan
[0,0,0,0,0,0]
, jalankan kedua sangat condong ke arah 1 dengan[0,100,100,100,100,100]
, dan menjalankan terakhir sangat bias menuju 6 dengan cara yang sama.sumber
Perl 6 , 31 byte
Cobalah online!
Menerima distribusi berat saat ini sebagai BagHash, dimulai dengan satu di mana semua bobot adalah 1. Distribusi dimutasi di tempat.
pick
Metode BagHash memilih kunci secara acak menggunakan bobot terkait; bobot kunci itu kemudian dikurangi satu. Dengan demikian, jika bobot itu dibuat nol,++«.{1..6}
tambah bobot semua angka 1-6.sumber
Bahasa Wolfram (Mathematica) , 91 byte
Cobalah online!
sumber
Javascript (ES6 +), 97 byte
Penjelasan
Catatan ini pada akhirnya akan meledak jika
w
melebihi panjang 2 32 -1, yang merupakan panjang array max dalam js, tetapi Anda mungkin akan mencapai batas memori sebelum itu, mengingat array int 32-bit 2 panjang 32 -1 adalah 16GiB, dan beberapa browser (sebagian besar?) Tidak akan membiarkan Anda menggunakan lebih dari 4GiB.sumber
Perl 6 , 49 byte
Cobalah online!
Mengambil gulungan sebelumnya sebagai Tas (multiset). Mengembalikan gulungan baru dan distribusi baru.
Penjelasan
sumber
Pyth ,
2220 byteCobalah online!
Input adalah frekuensi sebelumnya sebagai daftar, menampilkan gulungan berikutnya dan frekuensi yang diperbarui dipisahkan oleh baris baru.
sumber
Jelly , 12 byte
Cobalah online!
Tautan monadik yang mengambil argumen tunggal, daftar penghitungan saat ini, dan mengembalikan daftar nomor yang dipilih dan daftar penghitungan yang diperbarui.
Jelly , 18 byte
Cobalah online!
Sebagai alternatif, inilah tautan niladik yang mengembalikan nomor yang dipilih dan melacak daftar hitungan dalam register.
sumber