Reikia ištraukti konkurso nugalėtoją, pakviesti mokinį prie lentos ar nuspręsti, kas išneš šiukšles? Šis nemokamas internetinis įrankis sąžiningai ir atsitiktine tvarka išrenka laimėtojus iš bet kokio jūsų įklijuoto sąrašo. Įveskite variantus į laukelį „Elementai“ — po vieną kiekvienoje eilutėje arba atskirtus kableliais, nustatykite norimą rezultatų skaičių laukelyje „Kiekis“ ir paspauskite „Generuoti“. Sąraše turi būti bent du elementai, o jame telpa iki 1000 įrašų, kurių kiekvienas gali būti iki 200 simbolių ilgio.
Kiekvienas traukimas atliekamas tiesiogiai jūsų naršyklėje, naudojant Web Crypto API (crypto.getRandomValues), kuri gauna kriptografiškai saugias atsitiktines reikšmes iš jūsų operacinės sistemos. Jūsų sąrašas niekada nesiunčiamas į serverį, nėra išsaugomas ir mes jo niekada nematome — tai čia kur kas svarbiau nei kituose generatoriuose, nes žmonės dažniausiai įklijuoja klientų sąrašus, klasių žurnalus ar kolegų vardus. Mygtukas „Įkelti iš failo“ laikosi to paties pažado: jūsų naršyklė pati perskaito failą ir užpildo laukelį vietoje, nieko niekur neįkeliant.
Nustatymai pritaikyti prie sąrašų, kuriuos žmonės iš tikrųjų naudoja. Nustatymas „Skyriklis“ pagal nutylėjimą yra „Automatinis“ ir pats atpažįsta eilūčių lūžius bei kablelius, todėl iš skaičiuoklės, pokalbio ar dokumento nukopijuotas sąrašas veikia be papildomo formatavimo. Užfiksuokite jį ties „Nauja eilutė“, „Kablelis“ arba „Tarpas“, kai jūsų duomenyse maišomi formatai. Atkreipkite dėmesį, kad „Tarpas“ visada yra sąmoningas pasirinkimas ir niekada netaikomas automatiškai, nes tokiuose įrašuose kaip vardai ir pavardės yra tarpų, o automatinis padalijimas pagal juos sugadintų sąrašą. Laukelyje „Kiekis“ nustatoma, kiek elementų reikia ištraukti (nuo 1 iki 100). Traukiate tris prizų laimėtojus iš 200 dalyvių? Įklijuokite dalyvius, nustatykite „Kiekis“ ties 3 ir paspauskite „Generuoti“. Du nustatymai suveikia tik tada, kai kiekis yra 2 ar daugiau, o iki tol lieka neaktyvūs: jungiklis „Be pasikartojimų“, kuris nustato, ar tas pats elementas gali būti ištrauktas du kartus, ir „Išvesties formatas“, kuris nustato, kaip atskiriami rezultatai („Po vieną kiekvienoje eilutėje“, „Atskirta tarpais“ ar „Atskirta kableliais“).
Mygtukų eilutė laukelio „Elementai“ viduje atlieka redagavimo veiksmus, kuriuos kitaip tektų daryti kitur. „Įkelti iš failo“ ištraukia sąrašą tiesiai iš tekstinio arba CSV failo. „Maišyti“ pakeičia įrašų tvarką laukelyje, „Rūšiuoti“ išdėsto juos abėcėlės ir natūralia skaičių seka (o antras paspaudimas ją apverčia), o „Išvalyti“ ištuština laukelį. Mygtukas „Užpildykite duomenų pavyzdžius“ įdeda trumpą bandomąjį sąrašą, kad galėtumėte išbandyti įrankį vienu paspaudimu. „Išskleisti, kad tilptų turinys“ atidaro laukelį, kad matytumėte visą ilgą sąrašą, o „Sutraukti iki numatytojo dydžio“ grąžina jį į pradinę padėtį. Po rezultatu esantis mygtukas „Kopijuoti viską“ perkelia kiekvieną ištrauktą elementą į iškarpinę, „Išsaugoti į failą“ įrašo juos į jūsų įrenginį, o „Istorija“ saugo jūsų paskutinius 10 traukimų naršyklėje, todėl ankstesnis rezultatas pasiekiamas vienu paspaudimu.
Kaip iš tikrųjų vyksta atsitiktinis pasirinkimas? Kai paspaudžiate „Generuoti“, puslapis, užuot pasikliovęs JavaScript pseudo-atsitiktine funkcija Math.random(), per crypto.getRandomValues paprašo naršyklės atsitiktinių reikšmių ir naudoja jas sąrašo pozicijoms pasirinkti. Neapdorotos 32 bitų reikšmės pavertimas pozicija yra vieta, kur dauguma įrankių tyliai klysta: pačios reikšmės padalijimas iš sąrašo ilgio ir liekanos (modulio) paėmimas yra akivaizdus, bet šališkas metodas. Taip yra todėl, kad, nebent skaičius 2^32 dalijasi iš sąrašo ilgio be liekanos, sąrašo pradžioje esantys elementai iškrenta šiek tiek dažniau nei likusieji. Šis trūkumas vadinamas modulio paklaida (modulo bias) ir yra išmatuojamas, o ne teorinis. Šis įrankis vietoj to atmeta bet kokią reikšmę, kuri viršija didžiausią tikslų sąrašo ilgio kartotinį, ir traukia iš naujo — ši technika žinoma kaip atmetimo atranka (rejection sampling). Tai kainuoja kelis papildomus traukimus fone, bet suteikia tikslią garantiją vietoj apytikslės. Pozicija sąraše nieko nekeičia: pirmas ir paskutinis elementai turi vienodą tikimybę kiekviename traukime.
Jungiklis „Be pasikartojimų“ atskiria dvi visiškai skirtingas traukimų rūšis, ir statistikoje kiekviena iš jų turi savo pavadinimą. Kai jis įjungtas, įrankis sumaišo jūsų sąrašo kopiją naudojant Fisher-Yates algoritmą ir paima elementus nuo viršaus — lygiai taip pat, kaip traukiant lapelius iš kepurės jų negrąžinant atgal, todėl niekas nepasirenkamas du kartus ir kiekviena to paties dydžio grupė turi vienodas galimybes. Tai vadinama atranka be grąžinimo (sampling without replacement), ir to reikia renkant prizų laimėtojus, komandas ar nustatant eilės tvarką. Kai jis išjungtas, kiekvienas pasirinkimas daromas nepriklausomai iš viso sąrašo, todėl tas pats elementas gali iškristi daugiau nei vieną kartą. Tai atranka su grąžinimu (sampling with replacement), reikalinga tada, kai visi išlieka tinkami kiekviename etape, pavyzdžiui, pasikartojančiuose traukimuose ar atliekant greitą statistinę imtį. Nė vienas iš šių režimų nėra sąžiningesnis už kitą; jie tiesiog atsako į skirtingus poreikius.
Sąžiningas traukimas iš pažiūros ir neturi atrodyti sąžiningas. Jei trauksite penkis vardus iš dešimties, reguliariai matysite du elementus, kurie pradiniame sąraše buvo greta, arba tą patį vardą du kartus iš eilės (jei leidžiami pasikartojimai), ir kiekvienas iš šių atvejų yra visiškai normalus. Kiekvienas traukimas yra nepriklausomas: ankstesni rezultatai neturi jokios įtakos vėlesniems, ir niekada neateina niekieno „eilė“ laimėti. Priešingai teigiantis instinktas vadinamas lošėjo klaida (gambler's fallacy), ir tai yra tas pats instinktas, dėl kurio mes patys prastai renkamės atsitiktinai — paprašyti pasirinkti, mes vengiame pirmo ir paskutinio elemento, stengiamės nekartoti vardų ir paskirstome savo pasirinkimus kur kas tolygiau nei tikras atsitiktinumas. Rezultatas, kuris atrodo įtartinai tvarkingai, yra žmogaus pirštų atspaudas; tikras atsitiktinumas sukuria grupuotes ir pasikartojimus.
Kodėl verta rinktis šį atsitiktinio pasirinkimo įrankį?
- Traukimas tik naršyklėje: jūsų sąrašas nuskaitomas jūsų įrenginyje ir niekur nesiunčiamas
- Web Crypto API atsitiktinumas: kriptografiškai saugus, o ne Math.random()
- Jokių modulio paklaidų: atmetimo atranka išlaiko vienodas visų elementų galimybes
- Bet kokia sąrašo forma: po vieną eilutėje, atskirta kableliais ar tarpais, be formatavimo
- Režimas „Be pasikartojimų“: ištraukite nugalėtojus ar komandas taip, kad niekas nebūtų pasirinktas du kartus
- Iki 1000 įrašų sąraše ir iki 100 rezultatų viename traukime
- Integruoti įrankiai: įkelti iš failo, maišyti, rūšiuoti, išvalyti, pavyzdiniai duomenys
- Istorija ir Išsaugoti į failą: išsaugokite traukimo, kurį gali tekti pagrįsti, įrašą
- Neribota ir nemokama: jokios registracijos, jokių limitų, nieko mūsų serveriuose
Atsitiktinis pasirinkimas praverčia visur, kur sprendimas turi atlaikyti kvestionavimą. Mokytojai kviečia mokinius prie lentos neišskirdami numylėtinių ir dalija klasę į projektų grupes. Turinį kuriantys asmenys ir rinkodaros specialistai traukia konkursų laimėtojus prieš auditoriją, kuri turi tikėti rezultato sąžiningumu. Vadovai paskirsto užduotis, kurių niekas nenori imtis savanoriškai, o komandos nusprendžia pristatymų eilę arba kas budės. Tyrėjai ištraukia atsitiktinę įrašų imtį auditui. Šeimos užbaigia ginčą, ką žiūrėti, o alkana grupė išsirenka kavinę. Bendras visų šių situacijų bruožas — tai atranka, kurią vėliau gali paaiškinti bet kas: traukimas naudoja kriptografinį atsitiktinumą, jis vyksta tik jūsų įrenginyje, o skiltis „Istorija“ išsaugo rezultatą, jei kas nors vėliau imtų juo abejoti.
Verta žinoti ir kelis sąžiningus šio įrankio apribojimus. Įrankis negali ištraukti daugiau unikalių elementų, nei yra jūsų sąraše — trims laimėtojams reikia bent trijų vardų — ir jis turi 1000 įrašų (po 200 simbolių kiekvienam) bei 100 rezultatų viename traukime limitą. Mygtukai „Maišyti“ ir „Rūšiuoti“ veikia eilutė po eilutės, todėl kableliais atskirtas sąrašas, įklijuotas į vieną eilutę, bus perrikiuotas tik tada, kai elementai bus išskirstyti po vieną eilutėje; be to, abu mygtukai pakeičia ne traukimo, o laukelyje esančio teksto tvarką, nes traukimas yra vienodai sąžiningas, nesvarbu, kaip surikiuoti jūsų įrašai. Taip pat, kiekvienas elementas turi visiškai vienodą svorį, todėl norint, kad traukime vieno vardo šansai būtų dvigubi, tą vardą sąraše reikia įrašyti du kartus. Šių ribų rėmuose įrankio garantija yra tvirta — kiekvienas jūsų sąrašo elementas turi visiškai vienodas galimybes kiekviename atskirame traukime.