CodeKitHub
Generatorski alati

Besplatan nasumični odabir s liste

Zadnje ažurirano:

Zalijepite listu — imena, zadatke, prijave na nagradnu igru, bilo što — po jedna stavka u retku, i promiješajte je u pravedan nasumičan poredak pomoću ispravnog Fisher-Yates algoritma. Uključite način izvlačenja pobjednika da izvučete samo N nasumičnih stavki, korisno za odabir pobjednika nagradne igre ili dodjelu nasumičnog redoslijeda bez otkrivanja cijele promiješane liste.

Š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

  1. Zalijepite svoju listu u okvir, po jedna stavka u retku.
  2. Neobavezno označite "remove duplicates before shuffling" ako lista može sadržavati ponavljanja.
  3. Za potpuno preslagivanje, jednostavno kliknite Shuffle. Za odabir pobjednika, označite opciju N stavki i postavite koliko ih izvući.
  4. Kopirajte rezultat — kliknite Shuffle ponovno bilo kad za novi nasumičan poredak ili novo izvlačenje.

Primjer

Ulaz

Alice
Bob
Charlie
Diana
Ethan

Izlaz

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.

Generator slučajnih brojeva · Generator UUID-a

Č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.

Povezani alati