Što je ovaj alat?
Nasumični odabir s liste preslaguje skup stavki u nasumičan slijed, ili izvlači nasumičan podskup iz njega. Zahtjevan dio je učiniti to bez pristranosti: naivan pristup poput sortiranja niza s nasumičnom komparacijskom funkcijom proizvodi iskrivljenu distribuciju gdje su neki poredci daleko vjerojatniji od drugih.
Ovaj alat koristi Fisher–Yates (Durstenfeld) algoritam miješanja, standardnu metodu za dokazano jednoličnu nasumičnu permutaciju — svaki mogući poredak vaše liste jednako je vjerojatan.
Zašto ga koristiti?
- Istinski nepristrano miješanje — Fisher–Yates, ne uobičajeni anti-obrazac sort(() => Math.random() - 0.5) koji iskrivljuje rezultate.
- Način izvlačenja pobjednika: izvucite točno N nasumičnih stavki umjesto miješanja cijele liste, idealno za nagradne igre.
- Neobavezno uklanjanje duplikata prije miješanja, za liste koje mogu imati slučajna ponavljanja.
- Radi s bilo kojim tekstom — imenima, zadacima, kartama, nagradama — po jedna stavka u retku.
- Privatno: miješanje se odvija u potpunosti u vašem pregledniku, ništa se ne šalje.
Kako ga koristiti
- Zalijepite svoju listu u okvir, po jedna stavka u retku.
- Neobavezno označite "remove duplicates before shuffling" ako lista može sadržavati ponavljanja.
- Za potpuno preslagivanje, jednostavno kliknite Shuffle. Za odabir pobjednika, označite opciju N stavki i postavite koliko ih izvući.
- Kopirajte rezultat — kliknite Shuffle ponovno bilo kad za novi nasumičan poredak ili novo izvlačenje.
Primjer
Ulaz
Alice
Bob
Charlie
Diana
EthanIzlaz
Nasumično preslagana lista poput Charlie, Ethan, Alice, Diana, Bob — svaki put drugačija kad kliknete Shuffle.S načinom izvlačenja pobjednika postavljenim na 2, isti unos mogao bi umjesto toga proizvesti samo Ethan i Alice — nasumično izvlačenje 2 stavke, ne isječak od 2 stavke iz jednog promiješanog poretka.
Zašto naivno miješanje proizvodi pristrane rezultate
sort(() => Math.random() - 0.5) uobičajen je trik koji izgleda ispravno, ali nije: oslanja se na to da algoritam sortiranja poziva komparator određeni broj puta u određenom obrascu, a stvarne implementacije sortiranja to ne jamče. Praktičan učinak je miješanje gdje se određeni poredci pojavljuju češće od drugih — dovoljno suptilno da prođe ležeran pogled, ali statistički mjerljivo tijekom mnogo pokretanja.
Fisher–Yates zaobilazi cijeli problem: umjesto da traži od algoritma sortiranja da neizravno proizvede nasumičnost, izravno zamjenjuje svaku poziciju s nasumičnom preostalom pozicijom točno jednom, što je dokazano jednoliko bez obzira na osnovnu implementaciju sortiranja jezika.
Često postavljana pitanja
Zašto jednostavno ne koristiti array.sort(() => Math.random() - 0.5)?
Taj jednostavan izraz poznati je anti-obrazac: JavaScriptov sort() ne jamči da će se svaki par elemenata usporediti isti broj puta, pa je rezultirajući poredak mjerljivo pristran prema određenim permutacijama — neke stavke završe vjerojatnije blizu početka ili kraja nego što bi to prava nasumičnost proizvela. Fisher–Yates u potpunosti izbjegava ovo po konstrukciji, i to je algoritam koji ovaj alat zapravo implementira.
Je li poredak miješanja istinski nepristran?
Da. Fisher–Yates prolazi kroz listu jednom, i pri svakom koraku zamjenjuje trenutnu stavku s jednoliko nasumičnom stavkom iz preostalog neizmiješanog dijela. Ovo je matematički dokazano da proizvodi svaki mogući poredak s jednakom vjerojatnošću, uz dobar izvor nasumičnosti (JavaScriptov Math.random()).
Koja je razlika između miješanja i načina izvlačenja pobjednika?
Način miješanja preslaguje svaku stavku na vašoj listi i prikazuje ih sve, samo u novom poretku. Način izvlačenja pobjednika izvlači samo N stavki nasumično i prikazuje samo njih — korisno kad želite odabrati fiksan broj pobjednika ili uzoraka bez otkrivanja cijele preslagane liste.
Mogu li ovo koristiti za pravo izvlačenje nagrada ili nagradnu igru?
Da, za neformalne nagradne igre i izvlačenja ovo dobro funkcionira jer je nasumičnost istinski jednolika. Za zakonski regulirane nagradne igre s novčanim nagradama, provjerite lokalne propise — neke jurisdikcije zahtijevaju specifičan revidirajući postupak izvlačenja.
Mijenja li uklanjanje duplikata moju izvornu listu?
Ne — deduplikacija utječe samo na promiješani izlaz, i samo kad je potvrdni okvir uključen. Vaša lista unosa ostaje potpuno onakva kakvu ste je upisali, tako da možete uključiti opciju i ponovno miješati bez ponovnog upisivanja bilo čega.