Har du brug for at finde en vinder af en konkurrence, vælge en elev til at svare eller afgøre, hvem der tager opvasken? Denne gratis, online tilfældige udvælger trækker retfærdigt fra enhver liste, du indsætter. Sæt dine elementer ind i feltet »Elementer« — en på hver linje, eller adskilt af kommaer — indstil, hvor mange du vil have med »Antal«, og tryk på »Generér«. En liste kræver mindst to elementer og kan rumme op til 1000, som hver må være op til 200 tegn lange.
Hver udtrækning foretages direkte i din browser ved hjælp af Web Crypto API (crypto.getRandomValues), som leverer kryptografisk stærke tilfældige værdier fra din browsers underliggende system. Din liste sendes aldrig til en server, logges ikke og bliver aldrig set af os — og det betyder mere her end på de fleste generatorer, da det folk indsætter typisk er en kundeliste, klasselister eller kollegers navne. »Indlæs fra fil« holder det samme løfte: din browser læser filen og udfylder feltet lokalt, uden at noget uploades nogen steder.
Mulighederne er skabt til de lister, folk faktisk har. »Adskiller« står på »Automatisk«, som selv kender forskel på linjeskift og kommaer og finder ud af, hvad din liste bruger, så en liste kopieret fra et regneark, en besked eller et dokument fungerer uden omformatering. Lås den fast til »Linjeskift«, »Komma« eller »Mellemrum« når dine data blander formaterne — og bemærk, at »Mellemrum« altid er et bevidst valg og aldrig automatisk, da for eksempel fulde navne indeholder deres egne mellemrum, og en automatisk opdeling af disse ville ødelægge flere lister, end den gavnede. »Antal« bestemmer, hvor mange elementer der trækkes, fra 1 til 100. Skal der trækkes tre vindere blandt 200 deltagere? Indsæt deltagerne, sæt »Antal« til 3, og tryk på »Generér«. To kontroller gælder først, når antallet er 2 eller mere, og forbliver deaktiverede indtil da: »Uden dubletter«, som afgør, om det samme element kan trækkes to gange, og »Outputformat«, som bestemmer, hvordan valgene adskilles — »Hver på en ny linje«, »Adskilt med mellemrum« eller »Adskilt med komma«.
En række knapper inde i feltet »Elementer« udfører den redigering, du ellers ville lave et andet sted. »Indlæs fra fil« trækker en liste direkte ud af en almindelig tekst- eller CSV-fil. »Bland« ændrer rækkefølgen på elementerne i feltet, »Sorter« arrangerer dem alfabetisk, hvor tal ordnes naturligt (og et ekstra klik vender rækkefølgen om), og »Ryd« tømmer feltet helt. »Udfyld med eksempeldata« indsætter en kort prøveliste, så du kan afprøve udvælgeren med ét klik, mens »Udvid for at passe til indhold« folder feltet ud for at vise en lang liste i sin helhed, og »Skjul til standardstørrelse« folder det tilbage igen. Under resultatet kopierer »Kopiér alt« hver udtrækning til din udklipsholder, »Gem som fil« gemmer dem lokalt, og »Historik« gemmer dine seneste 10 trækninger i din browser, så et tidligere resultat kun er et klik væk.
Hvordan foregår udvælgelsen egentlig? Når du trykker på »Generér«, beder siden browseren om tilfældige værdier via crypto.getRandomValues og bruger dem til at vælge positioner i din liste, frem for at bruge en pseudotilfældig JavaScript-funktion som Math.random(). At omdanne en rå 32-bit værdi til en position er dér, hvor udvælgere ofte fejler i det skjulte: at tage værdien modulo listens længde er den mest oplagte tilgang, men den er skæv, for medmindre længden går perfekt op i 2^32, vil elementerne forrest på listen blive valgt en anelse oftere end resten. Denne svaghed kaldes modulo-bias, og den kan måles frem for blot at være teoretisk. Denne udvælger kasserer i stedet enhver værdi, der overstiger det største eksakte multiplum af listens længde, og trækker igen — en teknik kaldet rejection sampling (forkastelsesmetode). Det koster et par ekstra trækninger, men giver en præcis garanti i stedet for en omtrentlig. Placeringen på listen ændrer intet: det første og det sidste element har nøjagtig den samme sandsynlighed ved hver eneste trækning.
Indstillingen »Uden dubletter« adskiller to reelt forskellige typer trækninger, og statistikken har et navn for hver. Med den aktiveret, blander udvælgeren en kopi af din liste ved hjælp af Fisher-Yates-algoritmen og tager elementerne fra toppen — præcis ligesom at trække lodsedler fra en hat uden at lægge dem tilbage, så ingen vælges to gange, og hver gruppe af den størrelse har samme sandsynlighed. Det er stikprøveudtagning uden tilbagelægning (sampling without replacement), og det er dét, du har brug for til præmievindere, hold og turrækkefølge. Er den deaktiveret, foretages hvert valg uafhængigt af hele listen, så det samme element kan dukke op mere end én gang — stikprøveudtagning med tilbagelægning (sampling with replacement), hvilket er det, du ønsker, når alle forbliver valgbare i hver runde, som ved gentagne kast eller en hurtig statistisk stikprøve. Ingen af tilstandene er mere retfærdige end den anden; de løser bare forskellige opgaver.
En retfærdig lodtrækning skal ikke se retfærdig ud. Træk fem navne ud af ti, og du vil regelmæssigt se to udvalgte, der stod ved siden af hinanden på den oprindelige liste, eller det samme navn to gange i træk, hvis dubletter er tilladt, og hvert eneste af disse tilfælde er helt almindeligt. Hver trækning er uafhængig: tidligere træk har ingen indflydelse overhovedet på de efterfølgende, og ingen »skylder« nogensinde at vinde. Instinktet, der insisterer på det modsatte, er spillersyndromet (gambler's fallacy), og det er det samme instinkt, der gør os dårlige til selv at vælge tilfældigt — bedt om at vælge tilfældigt, undgår vi det første og det sidste element, undgår at gentage et navn, og spreder vores valg langt mere jævnt end tilfældigheden nogensinde gør. Et resultat, der ser mistænkeligt pænt ud, er menneskets fingeraftryk; ægte tilfældighed skaber klynger.
Hvorfor benytte denne tilfældige udvælger?
- Trækning udelukkende i browseren: din liste læses på din enhed og sendes aldrig afsted
- Web Crypto API tilfældighed: kryptografisk sikker i modsætning til Math.random()
- Ingen modulo-bias: forkastelsesmetoden holder hvert enkelt element lige sandsynligt
- Enhver listeform: hver på en ny linje, med komma eller mellemrum uden at formatere om
- Modul »Uden dubletter«: træk vindere eller hold uden at nogen vælges to gange
- Op til 1000 elementer og op til 100 udvalgte i en enkelt trækning
- Indbyggede listeværktøjer: indlæs fra en fil, bland, sorter, ryd, eksempeldata
- Historik og gem som fil-funktion: behold dokumentation for et resultat, du måske skal forsvare
- Ubegrænset og gratis: ingen oprettelse, ingen begrænsninger, intet gemt på vores servere
Tilfældig udvælgelse dukker op overalt, hvor et valg skal kunne overleve at blive draget i tvivl. Lærere i Danmark udpeger elever uden at favorisere nogen, og opdeler klassen i projektgrupper. Streamere og markedsføringsfolk trækker vindere foran et publikum, der skal have tillid til resultatet. Ledere uddeler de opgaver, som ingen frivilligt melder sig til, og teams afgør præsentationsrækkefølgen eller hvem der har vagten. Forskere udtrækker en tilfældig stikprøve af journaler til revision. Familier afslutter diskussionen om, hvad de skal se i tv, og en sulten vennegruppe vælger restauranten. Den røde tråd er et valg, som alle kan forklare bagefter: trækningen bruger kryptografisk tilfældighed, den foregår udelukkende på din enhed, og din »Historik« gemmer resultatet, hvis nogen spørger til det senere.
Udvælgeren har nogle få ærlige begrænsninger, som er værd at kende. Den kan ikke trække flere unikke elementer, end der er på din liste — tre vindere kræver mindst tre navne — og den stopper ved 1000 elementer af hver 200 tegn med op til 100 valg i én trækning. Knapperne »Bland« og »Sorter« fungerer linje for linje, så en komma-separeret liste sat ind på én enkelt linje bliver først ændret, når den er delt op med ét element pr. linje; og begge knapper omarrangerer kun feltet og ikke selve trækningen, som er lige retfærdig uanset hvilken rækkefølge dine elementer står i. Hvert element bærer desuden bevidst præcis samme vægt, så en lodtrækning, hvor ét navn skal tælle dobbelt, kræver at det pågældende navn står på listen to gange. Inden for disse grænser er garantien stærk — hvert eneste element på din liste har nøjagtig den samme chance ved hver eneste trækning.