Menerapkan program atau fungsi yang mensimulasikan dadu umum untuk permainan peran. Ini harus menangani setidaknya d6 dan d20, dua dadu yang paling umum.
Namun, itu harus bekerja sebagai gamer stereotip mengharapkan mereka untuk bekerja, dan bukan sebagai pekerjaan dadu nyata.
Ini adalah lelucon di antara gamer, bahwa seseorang dapat memiliki lucky lucky khusus untuk lemparan yang sangat penting, dengan sebelumnya melempar banyak dadu, memilih yang menghasilkan angka "1", lalu melemparkannya lagi, sampai Anda mendapatkan beberapa yang menggulung "1" beberapa kali. Anda kemudian dengan hati-hati melestarikannya, karena mereka menggulung 1 beberapa kali secara berurutan, sehingga kemungkinan untuk menggulung 1 kali harus sangat rendah.
Tentu saja, ini bukan cara dadu bekerja dalam kehidupan nyata , karena gulungan secara statistik independen.
Dadu yang disimulasikan harus memperhitungkan daftar sebelumnya, dan bekerja dengan cara yang sama dengan cara penjudi dalam kekeliruan penjudi mengharapkannya berfungsi. Sebagai contoh, jika banyak angka rendah digulung, kemungkinan menggulirkan angka yang lebih tinggi harus ditingkatkan.
Namun, karena ini curang, Anda harus menyembunyikannya dengan baik . Ini berarti, pandangan sekilas pada program seharusnya tidak mengungkapkan bahwa Anda curang. Ini berarti, secara eksplisit menyimpan hasil sebelumnya dan membacanya di setiap lemparan akan terlalu mencurigakan. Anda harus menyembunyikan "properti" ini dari dadu Anda, dan poin bonus jika Anda menjadikannya masuk akal dan menyamarkannya sebagai kesalahan jujur. (misalnya, Anda membuat RNG Anda sendiri dengan cacat "tidak disengaja")
Para pemilih, harap perhatikan seberapa baik "cacat" tersembunyi ini.
Program harus jelas, dan tidak dikaburkan. Terlalu mudah untuk menyembunyikan kode jahat dalam program yang dikaburkan.
getRandomBetween(1,d)
akan menyebabkan saya melihat lebih dalam.Jawaban:
Jawa
Ini sangat sederhana sehingga jelas tidak menyembunyikan apa pun: tetapi
java.util.Random
merupakan generator kongruensi linear yang lugas, dan menggunakan teknik buang untuk memastikan keseragaman, sehingga menjamin bahwa dalam sembarang kelipatan terbesar dari yangsize
lebih kecil dari 2 ^ 48 sampel, ia akan mendistribusikan angka merata, memenuhi persyaratan.sumber
java.util.Random
berkinerja sangat sedikit hubungannya dengan perilaku jawaban ini. Sungguh, yang diandalkan oleh jawaban ini adalah fakta bahwa seperti RNG mana pun,java.util.Random
memiliki titik, dan jika Anda menghasilkan sejumlah angka pada urutan periode, sifat statistiknya akan rusak. Itu tidak terlalu menarik; hal yang sama akan terjadi bahkan dengan RNG yang aman secara kriptografis seperti Blum Blum Shub jika Anda menjalankannya cukup lama.Rubi
Saat ini hanya mendukung d6, nanti akan menambahkan dukungan d20 ...
Lihat dan lihat - dadu-dadu itu jahat!
sumber
Haskell
Gunakan satu hal acak untuk membuat hal acak lain: dalam kasus ini, kocok kartu untuk menghasilkan lemparan dadu.
Mengambil satu argumen, jumlah wajah pada dadu. Outputnya seperti ini:
... dan seterusnya untuk semua kartu (discard tidak dicetak). Terlalu jelas?
sumber