Trebate izvući dobitnika nagradne igre, prozvati učenika ili odlučiti ko će oprati suđe? Ovaj besplatni alat za nasumični izbor bira pošteno sa bilo koje liste koju zalijepite. Unesite svoje podatke u okvir „Stavke“ — po jedan u svakom redu ili odvojene zarezima — postavite koliko rezultata želite pomoću polja „Broj“ i pritisnite „Generiši“. Lista zahtijeva najmanje dva unosa i može primiti do 1000 stavki, svaku dužine do 200 znakova.
Svako izvlačenje se obavlja direktno u vašem pregledniku pomoću Web Crypto API-ja (crypto.getRandomValues), koji pruža kriptografski jake nasumične vrijednosti na osnovu osnovne nasumičnosti vašeg operativnog sistema. Vaša lista se nikad ne šalje na server, nikad se ne bilježi i mi je nikad ne vidimo — što je ovdje važnije nego kod većine generatora, jer ljudi obično lijepe spiskove klijenata, školske dnevnike ili imena kolega. Dugme „Učitaj iz datoteke“ ispunjava isto obećanje: vaš preglednik čita datoteku i lokalno ispunjava okvir, bez ikakvog prijenosa na internet.
Opcije su prilagođene listama koje ljudi zapravo imaju. Polje „Razdjelnik“ je unaprijed postavljeno na „Automatski“, što samo razlikuje prelaze u novi red od zareza i prepoznaje format vaše liste, tako da podaci kopirani iz tabele, poruke ili dokumenta funkcionišu bez potrebe za preoblikovanjem. Zaključajte ga na „Novi red“, „Zarez“ ili „Razmak“ kada vaši podaci miješaju formate — i imajte na umu da je odabir opcije „Razmak“ uvijek namjeran i nikad se ne dešava automatski, jer unosi poput punih imena prirodno sadrže razmake, pa bi njihovo automatsko razdvajanje pokvarilo više lista nego što bi popravilo. Polje „Broj“ određuje koliko se stavki izvlači, od 1 do 100. Izvlačite tri dobitnika među 200 učesnika? Zalijepite listu, postavite „Broj“ na 3 i pritisnite „Generiši“. Dvije kontrole primjenjuju se tek kada je broj 2 ili više i do tada ostaju neaktivne: prekidač „Bez ponavljanja“, koji odlučuje da li se ista stavka može izvući dva puta, i „Format rezultata“, koji određuje kako su izvučene stavke razdvojene — „Svaki u novom redu“, „Odvojeno razmacima“ ili „Odvojeno zarezima“.
Niz dugmadi unutar okvira „Stavke“ vrši uređivanje koje biste inače radili negdje drugo. Dugme „Učitaj iz datoteke“ ubacuje listu direktno iz obične tekstualne ili CSV datoteke. Dugme „Shuffle“ mijenja redoslijed unosa u okviru, „Sortiraj“ ih slaže abecedno s prirodnim poretkom brojeva, a drugi klik obrnuto, dok „Očisti“ potpuno prazni okvir. Dugme „Umetni primjer“ dodaje kratku probnu listu da jednim klikom testirate alat, dok „Proširi na cijelu listu“ povećava okvir kako bi prikazao dugačku listu u cijelosti, a „Skupi“ ga vraća na zadanu veličinu. Ispod rezultata, „Kopiraj sve“ stavlja svako izvlačenje u međuspremnik, „Sačuvaj u datoteku“ ih upisuje na vaš disk, a „Historija“ čuva posljednjih 10 izvlačenja u pregledniku, pa je povratak na raniji rezultat udaljen samo jedan klik.
Kako se zapravo vrši izvlačenje? Kada pritisnete „Generiši“, stranica traži od preglednika nasumične vrijednosti putem crypto.getRandomValues i koristi ih za odabir pozicija u vašoj listi, umjesto da se oslanja na pseudo-nasumičnu JavaScript funkciju Math.random(). Pretvaranje sirove 32-bitne vrijednosti u poziciju na listi je mjesto gdje slični alati neprimjetno griješe: dijeljenje po modulu te vrijednosti sa dužinom liste je najočigledniji, ali i pristrasan pristup. Razlog tome je što, osim ako se dužina ne dijeli s 2^32 bez ostatka, unosi pri vrhu liste izlaze nešto češće od ostalih. Taj propust naziva se modulo bias (modulna pristrasnost), i on je mjerljiv, a ne teoretski. Ovaj alat umjesto toga odbacuje svaku vrijednost koja prelazi najveći tačni višekratnik dužine liste i izvlači ponovo — tehnikom koja se naziva rejection sampling (uzorkovanje s odbacivanjem). To košta nekoliko dodatnih izvlačenja, ali daje preciznu umjesto približne garancije. Pozicija na listi ništa ne mijenja: prvi i posljednji unos nose istu vjerovatnoću u svakom izvlačenju.
Prekidač „Bez ponavljanja“ razdvaja dvije potpuno različite vrste izvlačenja, a statistika ima ime za svaku. Kada je uključen, alat promiješa kopiju vaše liste Fisher-Yates algoritmom i uzima unose s vrha — što je isto kao da izvlačite papiriće iz šešira bez vraćanja, tako da niko nije izabran dvaput, a svaka grupa te veličine je jednako moguća. To je uzorkovanje bez vraćanja (sampling without replacement), i upravo to vam treba za dodjelu nagrada, formiranje timova i redoslijed igranja. Kada je isključen, svaki izbor se donosi nezavisno s cijele liste, pa isti unos može izaći više puta — to je uzorkovanje s vraćanjem (sampling with replacement), koje vam treba kada svi ostaju u igri za svaki krug, recimo u ponovljenim izvlačenjima ili brzom statističkom uzorku. Nijedan način nije pošteniji od drugog; oni jednostavno odgovaraju na različite potrebe.
Pošteno izvlačenje uopšte ne bi trebalo izgledati pošteno. Izvucite pet imena od deset i redovno ćete viđati dva izbora koja su stajala jedan do drugog na originalnoj listi, ili isto ime dvaput zaredom ako su ponavljanja dozvoljena — i svaki od tih slučajeva je sasvim normalan. Svako izvlačenje je nezavisno: raniji rezultati nemaju apsolutno nikakav uticaj na kasnije, i niko nikad ne dođe „na redu“ za dobitak samo zato što mu je vrijeme. Instinkt koji tvrdi suprotno zove se kockarska zabluda (gambler's fallacy). To je isti onaj instinkt zbog kojeg smo loši u nasumičnom biranju — kad nas zamole da biramo na sreću, izbjegavamo prvi i posljednji unos, trudimo se ne ponavljati isto ime i širimo izbore mnogo ravnomjernije nego što to slučajnost ikada radi. Sumnjivo uredan rezultat je otisak ljudske ruke; prava slučajnost proizvodi grupisanja.
Zašto odabrati ovaj alat za nasumični izbor?
- Izvlačenje samo u pregledniku: lista se čita na uređaju i ne šalje nigdje
- Nasumičnost preko Web Crypto API-ja: kriptografski jako, a ne Math.random()
- Nema modulne pristrasnosti: rejection sampling svakom unosu daje jednaku šansu
- Svi oblici lista: po jedan u redu, odvojeno zarezima ili razmacima, bez preoblikovanja
- Način rada „Bez ponavljanja“: biranje pobjednika ili timova bez da iko bude izvučen dvaput
- Do 1000 stavki i do 100 odabira u jednom izvlačenju
- Ugrađeni alati: datoteka, miješanje, sortiranje, čišćenje i testni podaci
- Historija i čuvanje: imajte zapis o izvlačenju koje možda morate opravdati
- Neograničeno i besplatno: nema registracije, nema limita ni podataka na serveru
Nasumično izvlačenje se koristi svugdje gdje izbor mora izdržati preispitivanje. Nastavnici prozivaju učenike bez favorizovanja i dijele razred u projektne grupe. Streameri i marketinški stručnjaci izvlače pobjednike nagradnih igara pred publikom koja mora vjerovati rezultatu. Menadžeri dodjeljuju zadatke za koje se niko ne javlja dobrovoljno, a timovi dogovaraju redoslijed prezentacija ili dežurstva. Istraživači biraju nasumični uzorak zapisa za reviziju. Porodice rješavaju prepirke o tome šta gledati, a gladna raja bira kafić. Zajednička nit je selekcija koju svako može objasniti kasnije: izvlačenje se oslanja na kriptografsku nasumičnost, dešava se isključivo na vašem uređaju, a „Historija“ čuva rezultat ako neko kasnije posumnja u njega.
Ovaj alat ima nekoliko poštenih ograničenja koja vrijedi znati. Ne može izvući više različitih stavki nego što vaša lista sadrži — tri nagrade zahtijevaju najmanje tri imena — i staje na 1000 unosa od po 200 znakova, s do 100 izbora u jednom izvlačenju. Funkcije „Shuffle“ i „Sortiraj“ rade red po red, tako da će lista odvojena zarezima i zalijepljena u jedan red biti ispremiješana tek kada postane jedan unos po redu; i jedna i druga preuređuju tekst u okviru, a ne samo izvlačenje, koje je podjednako pošteno kakav god redoslijed bio. Svaki unos namjerno nosi apsolutno jednaku težinu, pa za izvlačenje gdje jedno ime vrijedi dvostruko trebate to ime upisati dvaput. Unutar tih granica garancija je čvrsta — svaka stavka na vašoj listi ima potpuno jednaku šansu pri apsolutno svakom izvlačenju.