Perlu membuat cabutan untuk pemenang hadiah, memanggil nama pelajar, atau memutuskan giliran mencuci pinggan? Pemilih rawak dalam talian percuma ini memilih secara adil daripada mana-mana senarai yang anda tampal. Masukkan penyertaan anda ke dalam kotak “Item” — setiap satu pada baris baharu, atau dipisahkan dengan koma — tetapkan bilangan yang anda mahukan pada “Bilangan pilihan”, dan tekan “Jana”. Sesuatu senarai memerlukan sekurang-kurangnya dua penyertaan dan boleh memuatkan sehingga 1000 nama, dengan panjang maksimum 200 aksara setiap satu.
Setiap pilihan dibuat secara terus di dalam pelayar anda menggunakan Web Crypto API (crypto.getRandomValues), yang membekalkan nilai rawak yang kukuh secara kriptografi daripada kerawak sistem asas pelayar anda. Senarai anda tidak pernah dihantar ke pelayan, tidak pernah dilog, dan tidak pernah dilihat oleh kami — dan ini lebih penting di sini berbanding pada kebanyakan penjana lain, kerana apa yang biasa ditampal oleh orang ramai ialah senarai pelanggan, daftar kedatangan kelas, atau set nama rakan sekerja. Butang “Muatkan daripada fail” turut menepati janji yang sama: pelayar anda membaca fail tersebut dan mengisi kotak itu secara setempat, tanpa ada sebarang muat naik ke mana-mana sahaja.
Pilihan-pilihan yang ada direka khusus untuk senarai yang sebenarnya dimiliki oleh orang ramai. “Pemisah item” ditetapkan pada “Pengesanan automatik”, yang membaca baris baharu serta koma dan mengenal pasti mana satu yang senarai anda gunakan, jadi senarai yang disalin daripada hamparan kerja, mesej sembang atau dokumen boleh digunakan tanpa perlu memformatnya semula. Kuncinya kepada “Baris baharu”, “Koma” atau “Ruang” apabila data anda mencampurkan pelbagai format — dan ambil perhatian bahawa “Ruang” sentiasa merupakan satu pilihan yang disengajakan dan tidak pernah automatik, kerana penyertaan seperti nama penuh mengandungi ruangnya sendiri dan memisahkannya secara lalai akan merosakkan lebih banyak senarai berbanding membetulkannya. “Bilangan pilihan” menentukan berapa banyak penyertaan yang patut dicabut, daripada 1 hingga 100. Ingin mencabut tiga pemenang hadiah daripada 200 penyertaan? Tampal senarai peserta, tetapkan “Bilangan pilihan” kepada 3, dan tekan “Jana”. Dua kawalan hanya terpakai apabila bilangan pilihan ialah 2 atau lebih dan kekal kelabu (tidak aktif) sebelum itu: “Tanpa ulangan”, yang menentukan sama ada penyertaan yang sama boleh dicabut dua kali, dan “Format hasil”, yang menetapkan bagaimana pilihan tersebut dipisahkan — “Setiap satu pada baris baharu”, “Dipisahkan dengan ruang”, atau “Dipisahkan dengan koma”.
Sederet butang di dalam kotak “Item” melakukan penyuntingan yang sebaliknya anda perlu lakukan di tempat lain. “Muatkan daripada fail” menarik senarai terus daripada fail teks biasa atau CSV. “Kocok” menyusun semula penyertaan di dalam kotak tersebut, “Isih” menyusunnya mengikut abjad berserta nombor dalam susunan semula jadi dan satu lagi klik akan menterbalikkan susunan itu, manakala “Kosongkan” mengosongkan kotak tersebut. “Isi dengan data sampel” memasukkan satu contoh senarai pendek supaya anda boleh mencuba alat ini dalam satu klik, manakala “Kembangkan” membuka kotak tersebut untuk memaparkan senarai panjang sepenuhnya dan “Kecilkan” melipatnya kembali. Di bawah hasil, “Salin Semua” meletakkan setiap pilihan pada papan keratan anda, “Simpan ke fail” menulisnya ke dalam peranti anda, dan “Sejarah” menyimpan 10 cabutan terakhir anda di dalam pelayar anda, supaya hasil yang terdahulu boleh dicapai dengan satu klik.
Bagaimanakah pilihan ini sebenarnya dibuat? Apabila anda menekan “Jana”, halaman ini meminta nilai rawak kepada pelayar melalui crypto.getRandomValues dan menggunakannya untuk memilih kedudukan dalam senarai anda, dan bukannya melalui fungsi pseudo-rawak JavaScript seperti Math.random(). Menukarkan nilai mentah 32-bit kepada satu kedudukan adalah punca alat pemilih sering membuat ralat secara diam-diam: mengambil nilai tersebut mengikut modulo panjang senarai adalah pendekatan yang paling jelas tetapi berat sebelah, kerana melainkan jika 2^32 boleh dibahagikan genap oleh bilangan item dalam senarai, penyertaan berhampiran permulaan senarai akan muncul sedikit lebih kerap berbanding yang lain. Kecacatan tersebut dipanggil modulo bias, dan ia boleh diukur dan bukannya sekadar teori. Pemilih ini sebaliknya membuang mana-mana nilai yang melebihi gandaan tepat terbesar bagi panjang senarai tersebut dan membuat cabutan semula — satu teknik yang dipanggil rejection sampling. Ia memakan beberapa cabutan tambahan secara latar belakang namun memberikan jaminan yang tepat dan bukan sekadar anggaran. Kedudukan dalam senarai sama sekali tidak membawa perubahan: penyertaan pertama dan terakhir memegang kebarangkalian yang sama untuk setiap cabutan.
“Tanpa ulangan” memisahkan dua jenis cabutan yang benar-benar berbeza, dan bidang statistik mempunyai nama untuk setiap satunya. Dengan butang ini dihidupkan, alat pemilih ini mengocok satu salinan senarai anda dengan algoritma Fisher-Yates dan mengambil penyertaan dari bahagian atas — sama seperti mencabut tiket dari dalam topi tanpa memasukkannya semula, supaya tiada siapa yang dicabut dua kali dan setiap kumpulan bersaiz itu mempunyai kebarangkalian yang sama. Itulah sampling without replacement (pensampelan tanpa penggantian), dan ia adalah apa yang anda mahukan untuk pemenang hadiah, pembahagian pasukan dan giliran. Dengan butang ini dimatikan, setiap pilihan dibuat secara berasingan daripada keseluruhan senarai, jadi penyertaan yang sama boleh muncul lebih daripada sekali — sampling with replacement (pensampelan dengan penggantian), yang mana amat diperlukan apabila setiap orang kekal layak dalam setiap pusingan, seperti dalam cabutan berulang atau sampel statistik pantas. Kedua-dua mod ini tidak mempunyai mana-mana satu yang lebih adil berbanding yang lain; ia hanya menjawab soalan yang berbeza.
Sesuatu cabutan yang benar-benar adil tidak sepatutnya kelihatan adil di mata manusia. Cabut lima nama daripada sepuluh dan anda akan kerap melihat dua pilihan yang berada bersebelahan dalam senarai asal, atau nama yang sama dua kali berturut-turut setelah ulangan dibenarkan, dan setiap satu daripadanya adalah biasa. Setiap cabutan adalah bebas: pilihan yang lebih awal tidak mempunyai pengaruh langsung pada pilihan yang seterusnya, dan tiada siapa yang pernah “tiba giliran” untuk menang. Naluri yang mendesak sebaliknya merupakan gambler's fallacy, dan ia adalah naluri yang sama yang menyebabkan kita menjadi kurang cekap apabila memilih secara rawak — apabila diminta memilih secara rawak, kita mengelak penyertaan pertama dan terakhir, mengelak daripada mengulang nama yang sama, dan meratakan pilihan kita dengan jauh lebih sekata daripada apa yang dilakukan oleh kebetulan. Hasil yang kelihatan terlalu kemas dan mencurigakan merupakan kesan cap jari manusia; kerawak yang tulen semestinya akan menghasilkan gumpalan secara rambang.
Mengapa anda harus memilih alat pemilih rawak ini?
- Cabutan berasaskan pelayar: senarai anda dibaca pada peranti anda dan tidak dihantar ke mana-mana
- Kerawak Web Crypto API: selamat secara kriptografi, bukan sekadar Math.random()
- Tiada modulo bias: rejection sampling mengekalkan setiap penyertaan pada kebarangkalian yang sama
- Sebarang bentuk senarai: satu baris, dengan koma, atau dengan ruang, tanpa pemformatan semula
- Mod “Tanpa ulangan”: cabut pemenang atau pasukan dengan tiada siapa dipilih dua kali
- Sehingga 1000 penyertaan, dan sehingga 100 pilihan dalam satu cabutan tunggal
- Alat senarai bina dalam: muatkan daripada fail, kocok, isih, kosongkan, data sampel
- Sejarah dan Simpan ke fail: simpan rekod cabutan yang mungkin perlu anda pertahankan kelak
- Tanpa had dan percuma: tiada pendaftaran, tiada had penggunaan, tiada data pada pelayan kami
Pemilihan secara rawak timbul di mana sahaja sesuatu keputusan itu perlu bertahan apabila dipertikaikan. Guru memanggil nama pelajar tanpa memilih kasih dan membahagikan kelas kepada kumpulan tugasan. Penstrim dan pemasar mencabut pemenang hadiah pemberian percuma dan cabutan bertuah di hadapan penonton yang mesti mempercayai hasilnya. Pengurus memberikan tugasan yang tiada siapa ingin lakukan, manakala pasukan menetapkan urutan pembentangan atau giliran panggilan bertugas (on-call). Penyelidik menarik sampel rekod rawak untuk tujuan audit. Keluarga meleraikan perdebatan filem apa yang hendak ditonton, dan rakan-rakan yang kelaparan memilih gerai makan mana yang patut dituju. Persamaan bagi semua perkara ini ialah satu pilihan yang sesiapa sahaja boleh menjelaskannya kemudian: cabutan tersebut menggunakan kerawak kriptografi, ia berlaku sepenuhnya pada peranti anda, dan “Sejarah” menyimpan hasilnya jika seseorang bertanyakannya kelak.
Beberapa had pemilih ini yang jujur patut diketahui. Alat pemilih ini tidak boleh mencabut penyertaan yang berbeza lebih banyak daripada jumlah dalam senarai anda — tiga pemenang memerlukan sekurang-kurangnya tiga nama — dan ia terhad pada 1000 penyertaan sebanyak 200 aksara setiap satu, dengan sehingga 100 pilihan dalam satu cabutan. “Kocok” dan “Isih” berfungsi baris demi baris, jadi senarai yang dipisahkan dengan koma yang ditampal pada satu baris tunggal hanya akan disusun semula setelah ia menjadi satu penyertaan bagi setiap baris; dan kedua-dua butang ini menyusun semula kotak tersebut dan bukannya mengubah cara cabutan, yang mana ia tetap adil walau apa jua susunan penyertaan anda. Setiap penyertaan juga membawa berat yang sama mengikut reka bentuk, jadi cabutan yang memerlukan satu nama dikira dua kali perlulah mempunyai nama tersebut disenaraikan dua kali. Di dalam batas had tersebut, jaminannya adalah kukuh — setiap penyertaan dalam senarai anda mempunyai peluang yang sama rata, bagi setiap cabutan tunggal.