Apakah alat ini?
Perawak senarai menyusun semula satu set item kepada urutan rawak, atau menarik subset rawak daripadanya. Bahagian yang mencabar ialah melakukannya tanpa berat sebelah: pendekatan naif seperti menyusun array dengan fungsi perbandingan rawak menghasilkan taburan yang senget di mana sesetengah susunan jauh lebih berkemungkinan berbanding yang lain.
Alat ini menggunakan algoritma kocokan Fisher–Yates (Durstenfeld), kaedah standard untuk permutasi rawak yang seragam secara terbukti — setiap susunan yang mungkin bagi senarai anda mempunyai kebarangkalian sama untuk muncul.
Kenapa guna alat ini?
- Kocokan yang benar-benar tidak berat sebelah — Fisher–Yates, bukan anti-pola sort(() => Math.random() - 0.5) yang biasa yang menyengetkan hasil.
- Mod pemilih pemenang: tarik tepat N item rawak bukannya mengocok seluruh senarai, sesuai untuk cabutan bertuah dan hadiah.
- Pilihan buang pendua sebelum mengocok, untuk senarai yang mungkin mempunyai ulangan tidak sengaja.
- Berfungsi dengan sebarang teks — nama, tugasan, tiket, hadiah — satu item setiap baris.
- Peribadi: pengocokan berlaku sepenuhnya dalam pelayar anda, tiada apa dimuat naik.
Cara menggunakannya
- Tampal senarai anda ke dalam kotak, satu item setiap baris.
- Jika perlu, tandakan "remove duplicates before shuffling" jika senarai mungkin mengandungi ulangan.
- Untuk susunan semula penuh, hanya klik Shuffle. Untuk memilih pemenang, tandakan pilihan N-item dan tetapkan berapa banyak yang mahu ditarik.
- Salin hasilnya — klik Shuffle semula bila-bila masa untuk susunan rawak baharu atau cabutan baharu.
Contoh
Input
Alice
Bob
Charlie
Diana
EthanHasil
Senarai yang disusun semula secara rawak seperti Charlie, Ethan, Alice, Diana, Bob — berbeza setiap kali anda klik Shuffle.Dengan mod pemilih pemenang ditetapkan kepada 2, input yang sama mungkin sebaliknya menghasilkan hanya Ethan dan Alice — cabutan 2 item rawak, bukan potongan 2 item daripada satu susunan yang dikocok.
Kenapa kocokan naif menghasilkan hasil yang berat sebelah
sort(() => Math.random() - 0.5) ialah teknik biasa yang kelihatan betul tetapi sebenarnya tidak: ia bergantung kepada algoritma sort memanggil komparator bilangan kali tertentu dalam corak tertentu, dan pelaksanaan sort dunia sebenar tidak menjamin itu. Kesan praktikalnya ialah kocokan di mana susunan tertentu muncul lebih kerap berbanding yang lain — cukup halus untuk lulus pandangan sepintas lalu, tetapi boleh diukur secara statistik sepanjang banyak larian.
Fisher–Yates mengelak keseluruhan masalah: bukannya meminta algoritma sort menghasilkan keacakan secara tidak langsung, ia terus menukar setiap kedudukan dengan kedudukan baki yang rawak tepat sekali, yang terbukti seragam tanpa mengira pelaksanaan sort bahasa asas.
Soalan lazim
Kenapa tidak gunakan sahaja array.sort(() => Math.random() - 0.5)?
Baris kod tunggal itu adalah anti-pola yang terkenal: sort() JavaScript tidak menjamin setiap pasangan elemen dibandingkan bilangan kali yang sama, jadi susunan hasil adalah senget secara terukur ke arah permutasi tertentu — sesetengah item berakhir lebih berkemungkinan berada berhampiran permulaan atau penghujung berbanding keacakan sebenar akan hasilkan. Fisher–Yates mengelak ini sepenuhnya melalui reka bentuk, dan itulah algoritma yang alat ini sebenarnya laksanakan.
Adakah susunan kocokan benar-benar tidak berat sebelah?
Ya. Fisher–Yates melintasi senarai sekali, dan pada setiap langkah menukar item semasa dengan item rawak seragam daripada bahagian yang belum dikocok. Ini terbukti secara matematik menghasilkan setiap susunan yang mungkin dengan kebarangkalian sama, memandangkan sumber keacakan yang baik (Math.random() JavaScript).
Apa beza antara mod kocokan dan mod pemilih pemenang?
Mod Shuffle menyusun semula setiap item dalam senarai anda dan menunjukkan kesemuanya, hanya dalam susunan baharu. Mod pemilih pemenang menarik hanya N item secara rawak dan menunjukkan hanya itu sahaja — berguna apabila anda mahu pilih bilangan pemenang atau sampel tetap tanpa mendedahkan keseluruhan senarai yang disusun semula.
Bolehkah saya gunakan ini untuk cabutan hadiah atau cabutan bertuah sebenar?
Ya, untuk cabutan bertuah dan pencabutan tidak formal ini berfungsi dengan baik kerana keacakan itu sememangnya seragam. Untuk cabutan bertuah berkanun dengan hadiah wang, semak peraturan tempatan anda — sesetengah bidang kuasa memerlukan proses cabutan yang boleh diaudit secara khusus.
Adakah membuang pendua mengubah senarai asal saya?
Tidak — penyahduaan hanya menjejaskan output yang dikocok, dan hanya apabila kotak semak dihidupkan. Senarai input anda kekal seperti yang anda taip, jadi anda boleh togol pilihan itu dan kocok semula tanpa menaip semula apa-apa.