Keni nevojë të tërhiqni një fitues për një dhuratë, të ngrini një nxënës në dërrasë apo të vendosni se kush do t'i lajë enët sot? Ky mjet falas në internet bën zgjedhje të drejta dhe të rastësishme nga çdo listë që hidhni në të. Vendosni opsionet tuaja në kutinë „Elementet“ — nga një në çdo rresht ose të ndara me presje, caktoni numrin e dëshiruar të rezultateve te „Numri“ dhe shtypni „Gjenero“. Një listë kërkon të paktën dy elemente dhe mban deri në 1000 shënime, secili me gjatësi deri në 200 karaktere.
Çdo përzgjedhje bëhet drejtpërdrejt në shfletuesin tuaj duke përdorur Web Crypto API (crypto.getRandomValues), që ofron vlera të rastësishme dhe të sigurta kriptografikisht nga sistemi operativ i pajisjes suaj. Lista juaj nuk dërgohet kurrë në ndonjë server, nuk ruhet dhe nuk shihet kurrë nga ne — dhe kjo është më e rëndësishme këtu sesa në gjeneruesit e tjerë, sepse ato që njerëzit ngjitin janë zakonisht një listë klientësh, një regjistër klase apo një listë me emrat e kolegëve. Butoni „Ngarkoni nga skedari“ mban të njëjtin premtim: shfletuesi juaj e lexon skedarin dhe e mbush kutinë në mënyrë lokale, pa ngarkuar asgjë në internet.
Opsionet janë të përshtatura për listat që njerëzit përdorin vërtet. „Ndarësi“ është i vendosur në „Automatik“ dhe dallon vetë rreshtat e rinj nga presjet, kështu që një listë e kopjuar nga një tabelë, nga një mesazh apo një dokument funksionon pa pasur nevojë ta ri-formatoni. Kyçeni në „Rresht i ri“, „Presje“ ose „Hapësirë“ kur të dhënat tuaja kanë formate të përziera. Vini re se opsioni „Hapësirë“ është gjithmonë një zgjedhje e qëllimshme dhe asnjëherë automatike, sepse shënimet si emrat e plotë përmbajnë vetë hapësira, dhe ndarja e tyre e paracaktuar do ta prishte listën. „Numri“ vendos se sa elemente do të tërhiqen (nga 1 në 100). Po tërhiqni tre fitues çmimesh nga 200 pjesëmarrës? Ngjitni pjesëmarrësit, caktoni opsionin „Numri“ në 3 dhe shtypni „Gjenero“. Dy komanda zbatohen vetëm kur numri i tërheqjeve është 2 ose më shumë, dhe deri atëherë mbeten joaktive (ngjyrë gri): çelësi „Pa përsëritje“, i cili vendos nëse i njëjti element mund të tërhiqet dy herë, dhe „Formati i daljes“, i cili përcakton se si ndahen rezultatet („Secili në rresht të ri“, „Ndarë me hapësira“ ose „Ndarë me presje“).
Rreshti i butonave brenda kutisë „Elementet“ bën modifikimet që ndryshe do t'ju duhej t'i bënit diku tjetër. „Ngarkoni nga skedari“ e tërheq listën drejtpërdrejt nga një skedar teksti ose CSV. Butoni „Përziej“ ngatërron radhitjen e shënimeve në kuti, „Rendit“ i rreshton ato alfabetikisht dhe sipas rendit natyror të numrave (ndërsa një klikim i dytë e kthen mbrapsht renditjen), ndërsa „Pastro“ e zbraz kutinë plotësisht. „Plotësoni me të dhëna mostër“ hedh një listë të shkurtër provë në mënyrë që ta provoni mjetin me një klik, kurse „Zgjero për t'iu përshtatur përmbajtjes“ e hap kutinë për të treguar një listë të gjatë të plotë, ndërsa „Palos në madhësinë e paracaktuar“ e kthen atë në përmasën e zakonshme. Nën rezultat, „Kopjo të gjitha“ e vendos çdo përzgjedhje në kujtesën tuaj (clipboard), „Ruaj në skedar“ i shkruan ato në pajisjen tuaj, dhe „Historiku“ mban 10 tërheqjet e fundit në shfletues, në mënyrë që një rezultat i mëparshëm të jetë i disponueshëm me një klik.
Si bëhet vërtet përzgjedhja? Kur shtypni „Gjenero“, faqja i kërkon shfletuesit vlera të rastësishme nëpërmjet crypto.getRandomValues dhe i përdor ato për të zgjedhur pozicionet në listën tuaj, në vend që të mbështetet tek një funksion pseudo-rastësor i JavaScript si Math.random(). Shndërrimi i një vlere bruto 32-bitëshe në një pozicion është faza ku shumë mjete bëjnë gabime pa u vënë re: marrja e mbetjes së vlerës pas pjesëtimit me gjatësinë e listës është qasja më e dukshme, por me anësi. Kjo ndodh sepse, përveç nëse numri 2^32 plotpjesëtohet me gjatësinë e listës, elementet afër fillimit të listës bien pak më shpesh se të tjerët. Kjo e metë quhet modulo bias, dhe ajo është diçka e matshme dhe jo thjesht teorike. Në vend të kësaj, ky mjet e flak çdo vlerë që kalon shumëfishin më të madh të saktë të gjatësisë së listës dhe tërheq përsëri — një teknikë që njihet si rejection sampling. Kjo i kushton disa tërheqje shtesë në prapaskenë, por ofron një garanci të saktë në vend të një të përafërti. Pozicioni në listë nuk ndryshon asgjë: elementi i parë dhe i fundit mbartin të njëjtin probabilitet në çdo tërheqje.
Çelësi „Pa përsëritje“ ndan dy lloje thelbësisht të ndryshme tërheqjesh, dhe statistika ka një emër për secilin. Kur është i ndezur, mjeti e përzien një kopje të listës suaj duke përdorur algoritmin Fisher-Yates dhe merr elementet e para nga kreu — fiks njësoj si të tërhiqni letra nga një kapele pa i kthyer ato sërish mbrapsht, kështu që askush nuk zgjidhet dy herë dhe çdo grup i asaj madhësie ka mundësi të barabarta. Kjo quhet sampling without replacement (kampionim pa zëvendësim) dhe është pikërisht ajo që ju duhet për përzgjedhjen fituesve të çmimeve, formimin e ekipeve ose renditjen e radhës. Kur është i fikur, çdo zgjedhje bëhet në mënyrë të pavarur nga e gjithë lista, kështu që i njëjti element mund të bjerë më shumë se një herë. Kjo është sampling with replacement (kampionim me zëvendësim), e cila është e nevojshme kur të gjithë mbeten të vlefshëm në çdo raund, si në tërheqjet e përsëritura apo një kampion i shpejtë statistikor. Asnjëri nga këto lloje nuk është më i drejtë se tjetri; thjesht ato u përgjigjen kërkesave të ndryshme.
Një tërheqje e drejtë nuk supozohet të duket e drejtë. Nëse tërhiqni pesë emra nga dhjetë, do të shihni rregullisht dy emra që ishin pranë njëri-tjetrit në listën origjinale, ose të njëjtin emër dy herë radhazi pasi të lejohen përsëritjet, dhe secili nga këto raste është plotësisht normal. Çdo tërheqje është e pavarur: rezultatet e mëparshme nuk kanë absolutisht asnjë ndikim në ato të mëvonshme, dhe askujt nuk i vjen „radha“ për të fituar. Instinkti që pretendon të kundërtën quhet gambler's fallacy (iluzioni i kumarxhiut), dhe është po ai instinkt që na bën neve njerëzve të dobët për të zgjedhur vërtet rastësisht — kur na kërkohet të zgjedhim një shënim në mënyrë të rastësishme, ne i shmangim elementin e parë dhe të fundit, përpiqemi të mos përsërisim të njëjtin emër dhe i shpërndajmë zgjedhjet tona shumë më në mënyrë të barabartë se ç'bën rastësia reale. Një rezultat që duket i rregulluar në mënyrë të dyshimtë është treguesi i gishtit të njeriut; rastësia e vërtetë prodhon grupime dhe përsëritje.
Pse ta zgjidhni këtë mjet për zgjedhje të rastësishme?
- Tërheqje vetëm në shfletues: lista lexohet në pajisjen tuaj dhe nuk dërgohet askund
- Web Crypto API: rastësi e sigurt kriptografikisht, jo Math.random()
- Pa modulo bias: rejection sampling ruan gjasat e barabarta për çdo element
- Çdo lloj liste: nga një në rresht, me presje, ose me hapësirë, pa pasur nevojë ri-formatimi
- Zgjedhje „Pa përsëritje“: tërhiqni fitues ose ekipe pa u zgjedhur askush dy herë
- Deri në 1000 shënime në listë dhe deri në 100 përzgjedhje në një tërheqje
- Mjete për listat të integruara: ngarko skedar, përziej, rendit, pastro, të dhëna mostër
- Historiku dhe Ruaj në skedar: mbani një regjistër të një tërheqjeje që mund t'ju duhet ta justifikoni
- E pakufizuar dhe falas: pa regjistrim, pa kufizime përdorimi, asgjë në serverët tanë
Zgjedhjet e rastësishme shfaqen kudo ku një vendim duhet t'i mbijetojë dyshimeve. Mësuesit ftojnë nxënësit në dërrasë pa pasur të preferuar dhe ndajnë klasën në grupe projektesh. Krijuesit e përmbajtjeve dhe personat e marketingut tërheqin fituesit e lojërave shpërblyese dhe shorteve para një audience që duhet të besojë te rezultati. Menaxherët shpërndajnë detyrat që asnjë nuk del vullnetar t'i bëjë, dhe ekipet vendosin radhën e prezantimeve ose personin kujdestar. Studiuesit zgjedhin një kampion të rastësishëm rekordesh për auditim. Familjet i japin fund debatit se çfarë të shikojnë, dhe një grup miqsh të uritur zgjedhin restorantin. Elementi i përbashkët në të gjitha këto situata është një përzgjedhje që çdokush mund ta shpjegojë më vonë: tërheqja përdor rastësi kriptografike, ajo zhvillohet tërësisht në pajisjen tuaj, dhe seksioni „Historiku“ ruan rezultatin nëse dikush e vë në dyshim më vonë.
Vlen të njihen dhe disa kufizime të sinqerta të këtij mjeti. Mjeti nuk mund të tërheqë më shumë elemente unike nga sa mban lista juaj — për tre fitues duhen të paktën tre emra — dhe ndalon në 1000 shënime (me nga 200 karaktere secili), si dhe lejon deri në 100 rezultate në një tërheqje. Butonat „Përziej“ dhe „Rendit“ funksionojnë rresht pas rreshti, prandaj një listë e ndarë me presje dhe e ngjitur si një rresht i vetëm do të riorganizohet vetëm kur elementet e saj të ndahen nga një për çdo rresht; gjithashtu, të dy butonat rirregullojnë tekstin në kuti, por nuk ndryshojnë vetë tërheqjen, e cila është njësoj e drejtë pavarësisht renditjes së të dhënave tuaja. Çdo element gjithashtu mban saktësisht të njëjtën peshë, prandaj nëse keni nevojë që një emër të llogaritet dyfish, ai emër duhet të shënohet dy herë në listë. Brenda këtyre kufijve garancia është e fortë — çdo shënim në listën tuaj ka saktësisht të njëjtat mundësi fiks në çdo tërheqje.