Trebate li izvući dobitnika nagradne igre, prozvati učenika ili dogovoriti tko baca smeće? Ovaj besplatni internetski alat provodi pošteno nasumično izvlačenje s bilo kojeg popisa koji zalijepite. Unesite svoje kandidate u okvir „Stavke” — svakoga u novi red ili odvojene zarezima — odredite koliko rezultata želite u polju „Broj” i pritisnite „Generiraj”. Popis mora sadržavati barem dva imena i može primiti do 1000 stavki, pri čemu svaka može biti duga do 200 znakova.
Svako se izvlačenje odvija izravno u vašem pregledniku koristeći Web Crypto API (crypto.getRandomValues), koji pruža kriptografski snažne nasumične vrijednosti povlačeći ih iz sustava na kojem radite. Vaš se popis nikada ne šalje na poslužitelj, nigdje se ne bilježi i mi ga nikada ne vidimo — što je ovdje važnije nego kod većine drugih generatora, budući da korisnici obično unose popis klijenata, imenik razreda ili imena kolega. Gumb „Učitaj iz datoteke” drži se istog obećanja: vaš preglednik čita datoteku i lokalno popunjava okvir, a da se pritom baš ništa ne prenosi na internet.
Opcije su prilagođene popisima kakve korisnici zaista imaju. Opcija „Razdjelnik” zadano stoji na „Automatski”, što samostalno razlikuje prijelome reda i zareze te prepoznaje koji od njih vaš popis koristi, pa podaci kopirani iz proračunske tablice, poruke u chatu ili dokumenta funkcioniraju bez ikakvog dodatnog oblikovanja. Zaključajte ga na „Novi red”, „Zarez” ili „Razmak” kada vaši podaci miješaju formate — uz napomenu da je opcija „Razmak” uvijek namjeran izbor i nikada se ne primjenjuje automatski, jer stavke poput imena i prezimena ionako sadrže razmake pa bi njihovo automatsko razdvajanje uništilo više popisa nego što bi ih popravilo. Polje „Broj” određuje koliko će se stavki izvući, u rasponu od 1 do 100. Izvlačite li tri dobitnika među 200 natjecatelja? Zalijepite njihova imena, postavite „Broj” na 3 i pritisnite „Generiraj”. Dvije postavke postaju dostupne tek kada je broj 2 ili veći, a do tada ostaju zasivljene: prekidač „Bez ponavljanja”, koji odlučuje može li se ista stavka izvući dva puta, te „Format rezultata”, koji određuje kako će odabrane stavke biti odvojene — „Svaki u novom redu”, „Odvojeno razmacima” ili „Odvojeno zarezima”.
Niz gumba unutar okvira „Stavke” obavlja uređivanje koje biste inače morali raditi negdje drugdje. Gumb „Učitaj iz datoteke” povlači popis izravno iz obične tekstualne ili CSV datoteke. Gumb „Nasumično” miješa redoslijed unosa u okviru, „Poredaj” ih slaže abecednim i prirodnim brojevnim redoslijedom dok ih drugi klik okreće naopako, a „Očisti” u potpunosti prazni okvir. Gumb „Umetni primjer” ubacuje kratki ogledni popis kako biste alat mogli isprobati jednim klikom, dok ga „Proširi na cijeli popis” razvlači kako bi u cijelosti prikazao duge popise, a „Skupi” ga vraća u početnu veličinu. Ispod rezultata, „Kopiraj sve” prebacuje svaki odabir u vaš međuspremnik, „Spremi u datoteku” ih zapisuje na vaš uređaj, a „Povijest” čuva vaših zadnjih 10 izvlačenja unutar preglednika, tako da je svaki prijašnji rezultat dostupan jednim klikom.
Kako se točno provodi odabir? Kad pritisnete „Generiraj”, stranica traži od preglednika nasumične vrijednosti putem funkcije crypto.getRandomValues i koristi ih za biranje pozicija s vašeg popisa, umjesto oslanjanja na pseudo-nasumičnu JavaScript funkciju Math.random(). Pretvaranje sirove 32-bitne vrijednosti u poziciju na popisu mjesto je gdje ovakvi alati neprimjetno griješe: dijeljenje te vrijednosti s dužinom popisa i uzimanje ostatka (modulo) najočitiji je, ali i pristran pristup. Razlog leži u tome što će se — osim kada je broj 2^32 bez ostatka djeljiv dužinom popisa — stavke pri početku popisa pojavljivati neznatno češće od ostalih. Taj se nedostatak naziva pristranost ostatka (modulo bias) i on je potpuno mjerljiv, a ne samo teoretski. Ovaj alat umjesto toga odbacuje svaku vrijednost koja prelazi najveći točni višekratnik dužine popisa i provodi novo izvlačenje — što je tehnika poznata kao uzorkovanje s odbacivanjem (rejection sampling). Takav pristup košta nekoliko dodatnih izvlačenja u pozadini, ali donosi posve točno jamstvo umjesto tek približnog. Pozicija na popisu ne mijenja baš ništa: prva i posljednja stavka imaju potpuno jednaku vjerojatnost u svakom izvlačenju.
Prekidač „Bez ponavljanja” razdvaja dvije potpuno različite vrste izvlačenja, a statistika za svaku ima poseban naziv. Kada je uključen, alat miješa kopiju vašeg popisa pomoću Fisher-Yatesovog algoritma i uzima stavke s vrha — baš kao kad izvlačite papiriće iz šešira bez da ih vraćate natrag, pa nitko ne može biti izvučen dvaput i svaka grupa te veličine jednako je vjerojatna. To se naziva uzorkovanje bez vraćanja (sampling without replacement) i upravo je ono što vam treba za dobitnike nagrada, formiranje timova ili redoslijed poteza. Kada je isključen, svaki se odabir vrši neovisno iz cijelog popisa, pa se ista stavka može pojaviti više puta — što predstavlja uzorkovanje s vraćanjem (sampling with replacement), potrebno kada svi ostaju kandidati u svakom krugu, kao kod uzastopnih izvlačenja ili brzog statističkog uzorka. Nijedan od ovih načina nije pošteniji od onog drugog; oni jednostavno odgovaraju na različite potrebe.
Pošteno izvlačenje ne bi trebalo izgledati pošteno. Izvucite pet imena od deset ponuđenih i redovito ćete dobiti dva odabira koji su se na izvornom popisu nalazili jedan pored drugog, ili dvaput zaredom isto ime ako su ponavljanja dozvoljena — i svaki od tih slučajeva sasvim je uobičajen. Svako je izvlačenje neovisno: prijašnji odabiri nemaju apsolutno nikakav utjecaj na one kasnije i ničiji red za pobjedu nikada ne postaje „dužan” doći samo zato što je prošlo puno vremena. Nagon koji nas tjera da vjerujemo u suprotno zove se kockarska zabluda (gambler's fallacy), a to je isti onaj nagon zbog kojeg smo jako loši u samostalnom nasumičnom biranju — kada nas se traži da biramo nasumce, izbjegavamo prvu i zadnju stavku, trudimo se ne ponoviti ime i raspoređujemo svoje odabire puno ravnomjernije nego što to istinska slučajnost ikada čini. Rezultat koji izgleda sumnjivo uredno zapravo je otisak čovjeka; prava nasumičnost proizvodi nakupine.
Zašto odabrati ovaj alat za nasumično izvlačenje?
- Izvlačenje se vrši isključivo u pregledniku: vaš popis čita se na uređaju i nikada se ne šalje dalje
- Web Crypto API slučajnost: alat nudi kriptografsku sigurnost, a ne Math.random()
- Nema pristranosti ostatka: rejection sampling osigurava iste izglede svakoj stavci
- Bilo koji oblik popisa: u novom redu, zarezima ili razmacima, bez preoblikovanja teksta
- Način „Bez ponavljanja”: izvucite pobjednike ili timove u kojima nitko nije odabran dvaput
- Popis prima do 1000 stavki, uz najviše 100 odabira unutar jednog izvlačenja
- Ugrađeni alati za uređivanje: učitavanje iz datoteke, miješanje, sortiranje, brisanje
- Povijest i spremanje u datoteku: zadržite zapis o izvlačenju koje ćete možda morati opravdati
- Neograničeno i besplatno: nema registracije, nema limita korištenja, ništa na našim poslužiteljima
Nasumično odabiranje pojavljuje se svugdje gdje neka odluka mora preživjeti propitkivanje. Učitelji u Hrvatskoj prozivaju učenike bez favoriziranja i dijele razred u grupe za projekte. Streameri i marketingaši izvlače pobjednike nagradnih igara i ždrijebova pred publikom koja mora vjerovati u rezultat. Menadžeri dodjeljuju zadatke za koje se nitko ne javlja dobrovoljno, a timovi odlučuju o redoslijedu prezentacija. Istraživači povlače nasumični uzorak zapisa za reviziju. Obitelji prekidaju svađu oko toga što će gledati na televiziji, a gladno društvo odabire u koju će pizzeriju ići. Zajednička nit svih ovih situacija jest odabir koji svatko naknadno može objasniti: ovo izvlačenje koristi kriptografsku slučajnost, u potpunosti se odvija na vašem uređaju, a značajka „Povijest” čuva rezultat ako netko kasnije pita za njega.
Važno je znati nekoliko poštenih ograničenja ovog alata. Alat ne može izvući više različitih stavki nego što ih vaš popis sadrži — za tri dobitnika potrebna su barem tri imena — i zaustavlja se na maksimalnih 1000 stavki, od kojih svaka smije imati do 200 znakova, s najviše 100 odabira po izvlačenju. Gumbi „Nasumično” i „Poredaj” rade red po red, pa će se popis odvojen zarezima koji je zalijepljen u jednom jedinom redu presložiti tek nakon što ga pretvorite u format jedna stavka po redu; i oba mijenjaju samo redoslijed u okviru umjesto samog izvlačenja, koje je jednako pošteno kakav god bio redoslijed vaših unosa. Svaka stavka prema dizajnu nosi potpuno jednaku težinu, pa izvlačenje u kojemu jedno ime treba vrijediti dvostruko zahtijeva da se to ime i upiše dva puta. Unutar tih granica, jamstvo je izuzetno čvrsto — svaka pojedinačna stavka na vašem popisu ima potpuno iste izglede pri apsolutno svakom izvlačenju.