Kailangang bumunot ng mananalo sa isang giveaway, tumawag ng estudyante para sa recitation, o magdesisyon kung sino ang maghuhugas ng pinggan? Ang libre at online na random picker na ito ay patas na pumipili mula sa anumang listahan na i-paste mo. Ilagay ang iyong mga entry sa kahon ng “Mga item” — isa bawat linya, o pinaghihiwalay ng mga kuwit — itakda kung ilan ang gusto mo sa pamamagitan ng “Bilang ng mga pipiliin”, at pindutin ang “Bumuo ng resulta”. Ang isang listahan ay nangangailangan ng hindi bababa sa dalawang entry at kayang maglaman ng hanggang 1000, kung saan ang bawat isa ay may haba na hanggang 200 character.
Ang bawat pagpili ay direktang ginagawa sa iyong browser gamit ang Web Crypto API (crypto.getRandomValues), na nagbibigay ng cryptographically strong na mga random na halaga mula sa pinagbabatayang system randomness ng iyong browser. Ang iyong listahan ay hindi kailanman ipinapadala sa isang server, hindi nai-log, at hindi namin nakikita — at mas mahalaga iyon dito kaysa sa karamihan ng mga generator, dahil ang madalas na i-paste ng mga tao ay listahan ng mga customer, class register, o mga pangalan ng katrabaho. Ang button na “Mag-load mula sa file” ay may kaparehong pangako: babasahin ng browser mo ang file at pupunan nito ang kahon nang lokal, kaya walang anumang nai-upload kahit saan.
Ang mga opsyon ay ginawa para sa mga format ng listahan na aktwal na ginagamit ng mga tao. Ang “Tagahiwalay ng item” ay naka-set sa “Awtomatikong pagtuklas”, na bumabasa ng mga line break at kuwit at inaalam kung alin sa dalawa ang ginagamit ng iyong listahan, kaya ang listahang kinopya mula sa spreadsheet, chat message, o dokumento ay gagana nang hindi na kailangang i-format muli. I-lock ito sa “Bagong linya”, “Kuwit”, o “Espasyo” kapag magkakahalo ang mga format ng iyong data — at tandaan na ang “Espasyo” ay palaging isang sinadyang pagpili at hindi kailanman nagiging awtomatiko, dahil ang mga entry gaya ng mga buong pangalan ay naglalaman ng sarili nilang mga espasyo at ang paghihiwalay sa mga ito by default ay mas makakasira kaysa makakatulong sa mga listahan. Ang “Bilang ng mga pipiliin” ang nagpapasya kung ilang entry ang bubunutin, mula 1 hanggang 100. Bubunot ng tatlong mananalo ng premyo mula sa 200 na sumali? I-paste ang mga sumali, itakda ang “Bilang ng mga pipiliin” sa 3, at pindutin ang “Bumuo ng resulta”. May dalawang control na nalalapat lamang sa sandaling ang bilang ay 2 o higit pa at mananatiling naka-grey out hanggang sa maabot ito: Ang “Iwasan ang mga duplicate”, na nagpapasya kung maaari bang mabunot ang parehong entry nang dalawang beses, at ang “Format ng resulta”, na nagtatakda kung paano pinaghihiwalay ang mga napili — “Bawat isa ay nasa bagong linya”, “Pinaghihiwalay ng espasyo”, o “Pinaghihiwalay ng kuwit”.
Isang hilera ng mga button sa loob ng kahong “Mga item” ang gumagawa sa pag-edit na karaniwang ginagawa mo sa ibang app. Ang “Mag-load mula sa file” ay direktang kumukuha ng listahan mula sa isang plain-text o CSV file. Ang “Balasahin” ay binabago ang pagkakasunud-sunod ng mga entry sa kahon, ang “Pagbukud-bukurin” ay inaayos ang mga ito ayon sa alpabeto kung saan natural na nakaayos ang mga numero at ang pangalawang pag-click ay babaliktarin ito, at ang “I-clear” ay aalisan ng laman ang kahon. Ang “Punan ng sample na data” ay naglalagay ng isang maikling halimbawang listahan upang masubukan mo ang picker sa isang click, habang ang “Palawakin” ay ibinubuka ang kahon upang ipakita nang buo ang isang mahabang listahan at ang “I-collapse” ay ititiklop ito pabalik sa default na laki. Sa ilalim ng resulta, inilalagay ng “Kopyahin Lahat” ang bawat napili sa iyong clipboard, isusulat naman ito ng “I-save sa file” bilang isang file, at pinapanatili ng “Kasaysayan” ang huli mong 10 pagbunot sa mismong browser mo, kaya isang click lang ang layo ng isang naunang resulta.
Paano ba talaga ginagawa ang pagpili? Kapag pinindot mo ang “Bumuo ng resulta”, humihingi ang pahina sa browser ng mga random na halaga sa pamamagitan ng crypto.getRandomValues at ginagamit ang mga ito upang pumili ng mga posisyon sa iyong listahan, sa halip na dumaan sa isang pseudo-random na function ng JavaScript gaya ng Math.random(). Ang pag-convert sa isang raw 32-bit na halaga upang maging isang posisyon ay ang punto kung saan palihim na nagkakamali ang mga picker: ang pagkuha ng modulo ng halaga sa haba ng listahan ay ang pinaka-obvious na paraan ngunit ito ay may kinikilingan, dahil maliban kung ang 2^32 ay eksaktong mahahati ng haba ng listahan, ang mga entry na malapit sa unahan ng listahan ay mas madalas na lumabas nang bahagya kaysa sa iba. Ang kapintasang iyon ay tinatawag na modulo bias, at ito ay nasusukat at hindi lamang nasa teorya. Sa halip na gawin iyon, ang picker na ito ay itinatapon ang anumang halaga na lampas sa pinakamalaking eksaktong multiple ng haba ng listahan at bubunot muli — isang diskarte na tinatawag na rejection sampling. Nangangailangan ito ng ilang karagdagang pagbunot ngunit nagbibigay naman ito ng isang eksaktong garantiya sa halip na isang pagtatantiya. Walang binabago ang posisyon sa listahan: ang unang entry at ang huli ay may parehong posibilidad sa bawat pagbunot.
Pinaghihiwalay ng “Iwasan ang mga duplicate” ang dalawang tunay na magkaibang uri ng pagbunot, at ang istatistika ay may pangalan para sa bawat isa. Kapag naka-on ito, babalasahin ng picker ang isang kopya ng iyong listahan gamit ang algorithm ng Fisher-Yates at kukunin ang mga entry mula sa itaas — kapareho ito ng pagbunot ng mga pangalan mula sa isang kahon nang hindi ibinabalik ang mga ito, kaya walang sinuman ang napipili nang dalawang beses at ang bawat grupo ng ganoong kalaki ay may pantay na pagkakataon. Iyan ang sampling without replacement, at ito ang gusto mo para sa mga mananalo ng premyo, mga team, at pagkakasunud-sunod ng turn. Kapag naka-off ito, ang bawat pagpili ay ginagawa nang hiwalay mula sa buong listahan, kaya ang parehong entry ay maaaring lumabas ng higit sa isang beses — sampling with replacement, na siya namang kailangan mo kapag ang lahat ay nananatiling kwalipikado sa bawat round, gaya ng sa magkakasunod na pagbunot o mabilis na statistical sample. Wala sa dalawang mode na ito ang mas patas kaysa sa isa; sinasagot lang nila ang magkaibang tanong.
Ang isang patas na pagbunot ay hindi dapat magmukhang patas. Bumunot ng limang pangalan mula sa sampu at madalas mong makikita ang dalawang napili na magkatabi sa orihinal na listahan, o ang parehong pangalan nang dalawang beses na magkasunod kapag pinapayagan ang mga duplicate, at ang bawat isa sa mga ito ay ordinaryo lamang. Ang bawat pagbunot ay independent: ang mga naunang napili ay walang anumang impluwensya sa mga susunod, at walang sinuman ang nagiging “nakatakda” nang manalo. Ang pakiramdam na nagpipilit sa kabaligtaran ay ang gambler's fallacy, at ito rin ang pakiramdam na dahilan kaya hindi tayo magaling sa random na pagpili kapag tayo mismo ang gumagawa — kapag hinilingang pumili nang random, iniiwasan natin ang una at huling entry, iniiwasan nating ulitin ang isang pangalan, at idinidistribyut natin ang ating mga pagpili nang mas pantay kaysa sa kung ano talaga ang ginagawa ng tsansa. Ang isang resulta na mukhang kahina-hinalang maayos at malinis ay ang marka ng isang tao; ang tunay na randomness ay gumagawa ng mga kumpol.
Bakit piliin ang random picker na ito?
- Pagpili sa loob lang ng browser: ang listahan mo ay binabasa sa device mo at hindi ipinapadala kahit saan
- Randomness mula sa Web Crypto API: cryptographically secure, hindi Math.random()
- Walang modulo bias: pinapanatili ng rejection sampling na pantay ang tsansa ng bawat entry
- Anumang format ng listahan: bawat linya, may kuwit, o may espasyo, nang hindi na nire-reformat
- Mode na “Iwasan ang mga duplicate”: bumunot ng mga mananalo o team na walang napipiling dalawang beses
- Hanggang 1000 entry, at hanggang 100 pagpili sa isang pagbunutan
- Mga tool sa listahan na naka-built-in: mag-load mula sa file, balasahin, i-sort, i-clear, sample data
- Kasaysayan at i-save sa file: magtago ng rekord ng pagbunot na maaaring kailanganin mong patunayan
- Walang limitasyon at libre: walang sign-up, walang limitasyon sa paggamit, walang naiiwan sa aming mga server
Ang random na pagpili ay lumilitaw saanman kailangang ipaglaban ang isang desisyon mula sa pagdududa. Tinatawag ng mga guro ang mga estudyante nang walang paboritismo at hinahati ang klase sa mga project group. Bumubunot ang mga streamer at marketer ng mga mananalo sa giveaway at raffle sa harap ng audience na kailangang maniwala sa resulta. Ibinibigay ng mga manager ang mga gawaing walang may gustong mag-volunteer, at nagdedesisyon ang mga team sa demo order o kung sino ang on call. Kumukuha ang mga researcher ng random sample ng mga rekord para i-audit. Tinatapos ng mga pamilya ang pagtatalo kung ano ang panonoorin, at pumipili ang isang gutom na barkada kung saang kainan pupunta. Ang pagkakapareho ng mga ito ay isang seleksyon na maipapaliwanag ng sinuman pagkatapos: ang pagbunot ay gumagamit ng cryptographic randomness, ganap itong nangyayari sa iyong device, at itinatago ng “Kasaysayan” ang resulta kung sakaling may magtanong tungkol dito sa huli.
May ilang tapat na limitasyon na dapat mong malaman. Hindi makakapili ang picker ng mas maraming magkakaibang entry kaysa sa kung ano ang nasa listahan mo — ang tatlong mananalo ay nangangailangan ng hindi bababa sa tatlong pangalan — at humihinto ito sa 1000 entry na may tig-200 character bawat isa, na hanggang 100 pagpili sa isang pagbunot. Ang “Balasahin” at “Pagbukud-bukurin” ay gumagana line by line, kaya ang isang comma-separated na listahan na na-paste sa isang linya ay mababago lamang ang pagkakasunud-sunod kapag isa na itong entry bawat linya; at pareho nilang inaayos ang mismong kahon sa halip na ang pagbunot, na nananatiling patas anuman ang pagkakasunud-sunod ng iyong mga entry. Ang bawat entry ay mayroon ding eksaktong parehong bigat by design, kaya ang isang pagbunot kung saan ang isang pangalan ay dapat bilangin nang doble ay nangangailangan na ilista ang pangalang iyon ng dalawang beses. Sa loob ng mga limitasyong iyon, matibay ang garantiya — ang bawat entry sa iyong listahan ay may eksaktong parehong tsansa, sa bawat solong pagbunot.