Nepieciešams izlozēt konkursa uzvarētāju, izsaukt skolēnu pie tāfeles vai izlemt, kurš iznesīs atkritumus? Šis bezmaksas tiešsaistes rīks godīgi un nejauši izvēlas uzvarētājus no jebkura jūsu ievietotā saraksta. Ievadiet variantus laukā „Vienumi“ — pa vienam katrā rindā vai atdalītus ar komatiem, laukā „Skaits“ norādiet vajadzīgo rezultātu skaitu un nospiediet „Ģenerēt“. Sarakstā jābūt vismaz diviem elementiem, un tajā var būt līdz 1000 ierakstiem, no kuriem katrs ir līdz 200 rakstzīmēm garš.
Katra izvēle tiek veikta tieši jūsu pārlūkprogrammā, izmantojot Web Crypto API (crypto.getRandomValues), kas iegūst kriptogrāfiski drošas nejaušas vērtības no jūsu operētājsistēmas. Jūsu saraksts nekad netiek nosūtīts uz serveri, netiek saglabāts un mēs to nekad neredzam — šeit tas ir daudz svarīgāk nekā citos ģeneratoros, jo cilvēki visbiežāk ielīmē klientu sarakstus, klašu žurnālus vai kolēģu vārdus. Poga „Ielādēt no faila“ ievēro to pašu solījumu: jūsu pārlūkprogramma pati nolasa failu un aizpilda lauku lokāli, neko nekur neaugšupielādējot.
Iestatījumi ir pielāgoti sarakstiem, kurus cilvēki reāli izmanto. Iestatījums „Atdalītājs“ pēc noklusējuma atrodas režīmā „Automātiski“, kas pats atpazīst rindu lūzumus un komatus, tāpēc no izklājlapas, sarakstes vai dokumenta iekopēts saraksts darbojas bez papildu formatēšanas. Ja jūsu datos ir jaukti formāti, nofiksējiet to uz „Jauna rinda“, „Komats“ vai „Atstarpe“. Ņemiet vērā, ka „Atstarpe“ vienmēr ir apzināta izvēle un nekad netiek piemērota automātiski, jo tādos ierakstos kā vārdi un uzvārdi ir atstarpes, un automātiska sadalīšana pēc tām sabojātu sarakstu. Lauks „Skaits“ nosaka, cik elementus izlozēt (no 1 līdz 100). Izlozējat trīs balvu ieguvējus no 200 dalībniekiem? Ielīmējiet dalībniekus, laukā „Skaits“ norādiet 3 un nospiediet „Ģenerēt“. Divi iestatījumi kļūst pieejami tikai tad, kad skaits ir 2 vai vairāk, bet līdz tam ir neaktīvi (pelēki): slēdzis „Bez atkārtojumiem“, kas nosaka, vai viens elements var tikt izlozēts divreiz, un „Izvades formāts“, kas nosaka rezultātu atdalīšanas veidu („Katrs jaunā rindā“, „Atdalīti ar atstarpēm“ vai „Atdalīti ar komatiem“).
Pogu rinda laukā „Vienumi“ veic rediģēšanas darbības, kuras citādi nāktos darīt kaut kur citur. „Ielādēt no faila“ izvelk sarakstu tieši no teksta vai CSV failo. „Jaukt“ maina ierakstu secību laukā, „Kārtot“ sakārto tos alfabēta un dabiskā skaitļu secībā (otrais klikšķis to apgriež otrādi), bet „Notīrīt“ pilnībā iztukšo lauku. Poga „Aizpildiet ar datu paraugu“ ievieto īsu testa sarakstu, lai jūs varētu izmēģināt rīku ar vienu klikšķi. Poga „Izvērst, lai ietilptu saturā“ atver lauku, lai parādītu visu garo sarakstu, savukārt „Sakļaut uz noklusējuma izmēru“ atgriež to sākotnējā stāvoklī. Zem rezultāta esošā poga „Kopēt visu“ iekopē katru izvēli starpliktuvē, „Saglabāt failā“ ieraksta tos jūsu ierīcē, bet „Vēsture“ jūsu pārlūkprogrammā saglabā pēdējās 10 izlozes, lai iepriekšējais rezultāts būtu pieejams ar vienu klikšķi.
Kā reāli notiek nejaušā izvēle? Kad nospiežat „Ģenerēt“, lapa, nevis paļaujas uz JavaScript pseidonejašās funkcijas Math.random(), bet caur crypto.getRandomValues pieprasa pārlūkprogrammai nejaušas vērtības un izmanto tās saraksta pozīciju izvēlei. Neapstrādātas 32 bitu vērtības pārvēršana pozīcijā ir vieta, kur lielākā daļa rīku nemanāmi kļūdās: vērtības dalīšana ar saraksta garumu un atlikuma (moduļa) ņemšana ir acīmredzama, bet neobjektīva pieeja. Tas ir tāpēc, ka, ja vien skaitlis 2^32 nedalās ar saraksta garumu bez atlikuma, saraksta sākumā esošie elementi izkrīt nedaudz biežāk nekā pārējie. Šis trūkums tiek saukts par moduļa nobīdi (modulo bias), un tas ir mērāms, nevis teorētisks. Šis rīks tā vietā atmet jebkuru vērtību, kas pārsniedz lielāko precīzo saraksta garuma reizinātāju, un velk no jauna — šī metode ir pazīstama kā noraidīšanas izlase (rejection sampling). Tas prasa dažas papildu izlozes fonā, taču sniedz precīzu garantiju, nevis aptuvenu. Pozīcija sarakstā neko nemaina: pirmajam un pēdējam elementam ir vienāda varbūtība katrā izlozē.
Slēdzis „Bez atkārtojumiem“ atdala divus pilnīgi atšķirīgus izlozes veidus, un statistikā katram ir savs nosaukums. Kad tas ir ieslēgts, rīks sajauc jūsu saraksta kopiju, izmantojot Fisher-Yates algoritmu, un paņem elementus no augšas — tieši tāpat kā velkot lozes no cepures un neliekot tās atpakaļ, tāpēc neviens netiek izvēlēts divreiz, un katrai šāda izmēra grupai ir vienādas iespējas. To sauc par izlasi bez atgriešanas (sampling without replacement), un tas ir nepieciešams, izvēloties balvu ieguvējus, komandas vai kārtas secību. Kad tas ir izslēgts, katra izvēle tiek veikta neatkarīgi no visa saraksta, tāpēc viens un tas pats elements var izkrist vairāk nekā vienu reizi. Tā ir izlase ar atgriešanu (sampling with replacement), kas ir nepieciešama tad, kad visi saglabā savas tiesības katrā kārtā, piemēram, atkārtotās izlozēs vai ātrā statistiskā izlasē. Neviens no šiem režīmiem nav godīgāks par otru; tie vienkārši atbild uz dažādām vajadzībām.
Godīgai izlozei no malas nav jāizskatās godīgai. Ja no desmit vārdiem izlozēsiet piecus, jūs regulāri redzēsiet divus elementus, kas sākotnējā sarakstā atradās blakus, vai arī to pašu vārdu divas reizes pēc kārtas (ja atkārtojumi ir atļauti), un katrs no šiem gadījumiem ir pilnīgi normāls. Katra izloze ir neatkarīga: iepriekšējie rezultāti nekādā veidā neietekmē turpmākos, un nekad nepienāk neviena „kārta“ uzvarēt. Pretējais instinkts tiek dēvēts par spēlmaņa maldiem (gambler's fallacy), un tas ir tas pats instinkts, kura dēļ mēs paši slikti izdarām nejaušu izvēli — kad lūdzam izvēlēties nejauši, mēs izvairāmies no pirmā un pēdējā elementa, cenšamies neatkārtot vārdus un sadalām savas izvēles daudz vienmērīgāk nekā patiesa nejaušība. Rezultāts, kas izskatās aizdomīgi glīts, ir cilvēka pirkstu nospiedums; patiesa nejaušība veido grupas un atkārtojumus.
Kāpēc izvēlēties šo nejaušās izvēles rīku?
- Izloze tikai pārlūkprogrammā: jūsu saraksts tiek lasīts ierīcē un nekur netiek nosūtīts
- Web Crypto API nejaušība: kriptogrāfiski droša, nevis Math.random()
- Bez moduļa nobīdes: noraidīšanas izlase saglabā vienādas visu elementu iespējas
- Jebkura saraksta forma: pa vienam rindā, ar komatu vai atstarpi, bez formatēšanas
- Režīms „Bez atkārtojumiem“: izlozējiet uzvarētājus vai komandas tā, lai neviens netiktu izvēlēts divreiz
- Līdz 1000 ierakstiem sarakstā un līdz 100 rezultātiem vienā izlozē
- Iebūvēti rīki: ielādēt no faila, jaukt, kārtot, notīrīt, datu paraugs
- Vēsture un Saglabāt failā: saglabājiet izlozes ierakstu, kuru var nākties pamatot
- Neierobežoti un bez maksas: bez reģistrācijas, bez limitu ierobežojumiem, nekā mūsu serveros
Nejauša izvēle noder visur, kur lēmumam ir jāiztur apšaubīšana. Skolotāji izsauc skolēnus pie tāfeles, neizceļot mīluļus, un sadala klasi projektu grupās. Satura veidotāji un mārketinga speciālisti izlozē konkursu uzvarētājus auditorijas priekšā, kurai jātic rezultāta godīgumam. Vadītāji sadala uzdevumus, kurus neviens nevēlas uzņemties brīvprātīgi, bet komandas izlemj prezentāciju secību vai dežūras. Pētnieki izvēlas nejaušu ierakstu izlasi auditam. Ģimenes pārtrauc strīdu par to, ko skatīties, bet izsalkusi kompānija izvēlas kafejnīcu. Visu šo situāciju kopīgā iezīme ir izvēle, ko vēlāk var pamatot jebkurš: izlozē tiek izmantota kriptogrāfiskā nejaušība, tā notiek tikai jūsu ierīcē, bet sadaļa „Vēsture“ saglabā rezultātu, ja kāds vēlāk to vēlētos apšaubīt.
Ir vērts zināt dažus godīgus šī rīka ierobežojumus. Rīks nevar izlozēt vairāk unikālu elementu, nekā ir jūsu sarakstā — trim uzvarētājiem nepieciešami vismaz trīs vārdi — un tas apstājas pie 1000 ierakstiem (līdz 200 rakstzīmēm katrā) un 100 rezultātiem vienā izlozē. Pogas „Jaukt“ un „Kārtot“ darbojas rindu pa rindai, tāpēc vienā rindā ielīmēts saraksts ar komatiem tiks pārkārtots tikai tad, kad elementi būs sadalīti pa vienam katrā rindā; turklāt abas pogas maina laukā esošā teksta, nevis pašas izlozes secību, jo izloze ir vienlīdz godīga neatkarīgi no tā, kādā secībā ir jūsu ieraksti. Tāpat katram elementam pēc noklusējuma ir pilnīgi vienāds svars, tāpēc, lai vienam vārdam izlozē būtu dubultas izredzes, tas sarakstā jānorāda divas reizes. Šo robežu ietvaros garantija ir stingra — katram jūsu saraksta elementam ir pilnīgi vienādas izredzes katrā atsevišķā izlozē.