Nyereményjáték győztesét sorsolná, diákot szólítana felelni, vagy eldöntené, hogy ki vigye le a szemetet? Ez az ingyenes online véletlenszerű választó igazságosan sorsol bármilyen beillesztett listából. Tegye az elemeit a „Tételek” mezőbe — soronként egyet, vagy vesszővel elválasztva —, állítsa be a kívánt mennyiséget a „Darabszám” mezőben, majd nyomja meg a „Generálás” gombot. Egy listának legalább két elemet kell tartalmaznia, és legfeljebb 1000 elemig működik, melyek mindegyike maximum 200 karakter hosszú lehet.
Minden választás közvetlenül a böngészőben történik a Web Crypto API (crypto.getRandomValues) használatával, amely kriptográfiailag erős véletlenszerű értékeket biztosít az operációs rendszere alapvető véletlenszám-generátorából. A listáját soha nem küldjük el egyetlen szerverre sem, nem naplózzuk, és mi magunk sem látjuk — ez pedig itt fontosabb, mint a legtöbb generátornál, hiszen az emberek általában ügyféllistákat, osztálynévsorokat vagy kollégák neveit illesztik be. A „Betöltés fájlból” gomb ugyanezt az ígéretet tartja meg: a böngészője magát a fájlt olvassa be, és az adatokat helyben tölti be a mezőbe, anélkül, hogy bármit is feltöltene az internetre.
A beállításokat pontosan azokra a listákra szabtuk, amelyekkel az emberek a valóságban dolgoznak. Az „Elválasztó” alapértelmezés szerint „Automatikus” állásban van, amely magától felismeri a sortöréseket és a vesszőket, így a táblázatokból, chates üzenetekből vagy dokumentumokból kimásolt lista mindenféle újraformázás nélkül azonnal használható. Zárja le a „Sortörés”, „Vessző” vagy „Szóköz” beállítások egyikére, ha az adatai többféle formátumot kevernek — és vegye figyelembe, hogy a „Szóköz” mindig tudatos választás, sosem automatikus, hiszen például a teljes nevek is tartalmaznak szóközöket, így az automatikus darabolásuk több listát tenne tönkre, mint amennyit megjavítana. A „Darabszám” határozza meg, hogy hány elemet húzzon ki, 1-től 100-ig. Három nyertest sorsol 200 jelentkező közül? Illessze be a résztvevőket, állítsa a „Darabszám” mezőt 3-ra, és nyomja meg a „Generálás” gombot. Két beállítás csak akkor lép érvénybe, ha a darabszám 2 vagy annál több, addig pedig szürkén inaktív marad: az „Ismétlődések nélkül”, amely eldönti, hogy egyazon elem húzható-e kétszer, valamint a „Kimeneti formátum”, amely azt szabályozza, hogyan legyenek elválasztva a kiválasztott elemek — „Soronként egy”, „Szóközzel elválasztva” vagy „Vesszővel elválasztva” formában.
A „Tételek” mezőn belüli gombsorral olyan szerkesztéseket végezhet el, amiket egyébként máshol kellene megcsinálnia. A „Betöltés fájlból” egyenesen egy egyszerű szöveges vagy CSV dokumentumból húzza be a listát. A „Keverés” összekeveri a mezőben lévő elemeket, a „Rendezés” ábécésorrendbe teszi őket a számok természetes sorrendjét követve (egy második kattintás megfordítja az irányt), a „Törlés” pedig kiüríti a mezőt. A „Töltse ki mintaadatokkal” gomb egy rövid példalistát dob be, hogy egyetlen kattintással kipróbálhassa az eszközt, míg a „Kibontás, hogy illeszkedjen a tartalomhoz” lenyitja a mezőt, hogy egy hosszú lista teljes egészében látszódjon, az „Összecsukása alapértelmezett méretre” pedig visszazárja. Az eredmény alatt található „Összes másolása” a vágólapra teszi a kiválasztott elemeket, a „Mentés fájlba” lementi őket a gépére, az „Előzmények” pedig a böngészőjében tárolja a legutóbbi 10 sorsolását, így egy korábbi eredmény csupán egy kattintásnyira van.
Hogyan is történik valójában a sorsolás? Amikor megnyomja a „Generálás” gombot, az oldal véletlenszerű értékeket kér a böngészőtől a crypto.getRandomValues használatával, és ezeket használja fel a pozíciók kiválasztására a listában, ahelyett, hogy olyan pszeudovéletlenszám-generáló JavaScript-funkcióra támaszkodna, mint a Math.random(). A nyers 32 bites érték pozícióvá alakítása az a lépés, ahol sok eszköz csendben hibázik: az érték lista hosszával vett modulójának használata egy kézenfekvő, ám torzító megközelítés. Ugyanis, hacsak a lista hossza nem osztója maradék nélkül a 2^32 értéknek, a lista elején lévő elemek valamivel gyakrabban fognak felbukkanni, mint a többiek. Ezt a hibát modulo torzításnak (modulo bias) hívják, és ez egy mérhető, nem csupán elméleti probléma. Jelen eszköz ehelyett eldob minden olyan értéket, amely meghaladja a lista hosszának legnagyobb pontos többszörösét, és újat húz — ezt a technikát elutasításos mintavételezésnek (rejection sampling) nevezik. Kerül ugyan néhány extra sorsolásba, de cserébe pontos garanciát nyújt a hozzávetőleges helyett. A listában elfoglalt pozíció semmin sem változtat: az első és az utolsó elemnek is teljesen azonos esélye van minden egyes húzásnál.
Az „Ismétlődések nélkül” kapcsoló két gyökeresen eltérő sorsolási fajtát különít el, melyekre a statisztikának külön elnevezése van. Amikor ez be van kapcsolva, az eszköz a Fisher-Yates algoritmussal megkeveri a lista egy másolatát, és a tetejéről veszi le az elemeket — ez pontosan ugyanaz, mintha cetliket húznánk egy kalapból anélkül, hogy visszatennénk őket, így senkit sem választanak ki kétszer, és minden ekkora méretű csoport azonos eséllyel indul. Ez a visszatevés nélküli mintavétel (sampling without replacement), és pontosan ezt akarjuk a nyereményjátékok, a csapatok és a körök sorrendjének eldöntésekor. Amikor ki van kapcsolva, minden húzás a teljes listából történik, egymástól függetlenül, így ugyanaz az elem többször is felbukkanhat — ez a visszatételes mintavétel (sampling with replacement), amely akkor hasznos, ha mindenki minden körben részt vehet, például ismételt húzásoknál vagy egy gyors statisztikai mintavételnél. Egyik mód sem igazságosabb a másiknál; egyszerűen más-más kérdésekre adnak választ.
Egy igazságos sorsolásnak nem szabad igazságosnak kinéznie. Húzzon ki tízből öt nevet, és rendszeresen látni fog két olyan választást, melyek az eredeti listában egymás mellett álltak, vagy akár kétszer egymás után ugyanazt a nevet, ha az ismétlődések engedélyezve vannak — és ezek mindegyike teljesen hétköznapi. Minden egyes sorsolás független: a korábbi húzások egyáltalán semmilyen befolyással nincsenek a későbbiekre, és senkinek sem lesz soha „esedékes” a győzelem. Az ezt cáfolni próbáló ösztön a szerencsejátékos-tévedés (gambler's fallacy), és ugyanez az ösztön tesz minket borzasztóvá abban, hogy magunktól véletlenszerűen válasszunk — ha arra kérnek minket, hogy véletlenszerűen döntsünk, kerüljük az első és az utolsó elemet, kerüljük a nevek ismétlését, és sokkal egyenletesebben osztjuk el a választásainkat, mint ahogy azt a véletlen valaha is tenné. Egy olyan eredmény, ami gyanúsan rendezettnek tűnik, egy ember ujjlenyomata; az igazi véletlenszerűség csomósodásokat hoz létre.
Miért érdemes ezt a véletlenszerű választót használni?
- Sorsolás kizárólag a böngészőben: a listáját az eszköze olvassa be, és nem küldi el sehova
- Web Crypto API véletlenszerűség: kriptográfiailag biztonságos, nem Math.random()
- Nincs modulo torzítás: az elutasításos mintavételezés minden elem esélyét egyenlőként őrzi meg
- Bármilyen listaformátum: soronként egy, vesszővel vagy szóközzel elválasztva, újraformázás nélkül
- „Ismétlődések nélkül” mód: sorsoljon nyerteseket vagy csapatokat úgy, hogy senkit sem húz ki kétszer
- Akár 1000 elem, és legfeljebb 100 választás egyetlen sorsoláson belül
- Beépített listakezelő eszközök: betöltés fájlból, keverés, rendezés, törlés, mintaadatok
- Előzmények és Mentés fájlba: őrizze meg annak a sorsolásnak a feljegyzését, amit talán igazolnia kell
- Korlátlan és ingyenes: nincs regisztráció, nincsenek használati korlátok, semmi sincs a szervereinken
A véletlenszerű sorsolás mindenhol felbukkan, ahol a döntésnek ki kell állnia az esetleges kérdéseket. A magyarországi tanárok kivételezés nélkül szólítják felelni a diákokat, és osztják fel az osztályt projektcsapatokra. A streamerek és marketingesek olyan közönség előtt húzzák ki a nyereményjátékok győzteseit, amelynek hinnie kell az eredményben. A menedzserek kiosztják azokat a feladatokat, amelyekre senki sem jelentkezik önként, a csapatok pedig eldöntik a demók sorrendjét, vagy azt, hogy ki legyen ügyeletben. A kutatók véletlenszerű mintát húznak a nyilvántartásokból az ellenőrzéshez. A családok lezárják a vitát arról, hogy mit nézzenek meg, egy éhes társaság pedig kiválasztja az éttermet. A közös szál az olyan választás, amit utólag bárki meg tud magyarázni: a húzás kriptográfiai véletlenszerűséget használ, teljes egészében az eszközén történik, az „Előzmények” pedig megőrzi az eredményt, ha valaki később rákérdezne.
Ennek az eszköznek van néhány őszinte korlátja, amit érdemes ismerni. Nem tud több egyedi elemet kihúzni, mint amennyit a lista tartalmaz — három nyerteshez legalább három névre van szükség —, és legfeljebb 1000, egyenként maximum 200 karakteres elemnél áll meg, egy sorsoláson belül pedig legfeljebb 100 választást enged. A „Keverés” és a „Rendezés” soronként működik, így az egyetlen sorba beillesztett, vesszővel elválasztott lista csak akkor lesz átrendezve, ha már soronként egy elemre lett felbontva; emellett mindkettő a mező tartalmát rendezi át, nem magát a sorsolást, amely ugyanolyan igazságos marad, függetlenül attól, hogy milyen sorrendben vannak az elemek. Alapvetően minden elem pontosan azonos súllyal bír, így egy olyan sorsolásnál, ahol egy névnek duplán kell számítania, azt a nevet kétszer kell felsorolni. Ezen korlátokon belül a garancia erős — a listában szereplő minden egyes elemnek pontosan ugyanakkora esélye van, minden egyes sorsolásnál.