Fügen Sie Ihre Liste ein (ein Name pro Zeile oder durch Komma getrennt) und ziehen Sie einen Gewinner oder mischen Sie alle in eine zufällige Reihenfolge.
Das Mischen, das fast alle falsch machen
Suchen Sie danach, wie man eine Liste mischt, und die erste Antwort lautet: mit einem zufälligen Vergleich sortieren, sort(() => Math.random() - 0.5). Eine Zeile, sieht clever aus, und liefert kein faires Mischen. Ein Sortieralgorithmus setzt voraus, dass der Vergleich konsistent ist: dass A vor C steht, wenn A vor B und B vor C steht. Ein Münzwurf ist nicht konsistent, also trifft der Algorithmus Entscheidungen auf Grundlage von Vergleichen, die er selbst schon widerlegt hat, und die Anordnung, bei der er landet, hängt von den Interna der Sortierung ab. In der Praxis kommen manche Reihenfolgen um ein Vielfaches häufiger heraus als andere, und welche das sind, hängt vom Browser ab.
Die richtige Methode ist hundert Jahre älter als der Fehler. Fisher-Yates läuft die Liste von der letzten Position bis zur zweiten durch und tauscht in jedem Schritt das aktuelle Element mit einem, das aus den Positionen bis einschließlich dieser gewählt wird. Dieses letzte Detail ist die ganze Sache: Der Bereich muss mitschrumpfen. Jedes Mal aus der ganzen Liste zu wählen, ist der klassische Fehler, und er ist subtil, weil weiterhin jede Reihenfolge erreichbar bleibt. Nur die Wahrscheinlichkeiten stimmen nicht. Mischen Sie drei Namen so, kommen drei der sechs Reihenfolgen doppelt so oft heraus wie die anderen drei.
Hier wiegt das schwerer als anderswo, denn eine Namensziehung wird gerade dann benutzt, wenn es um Fairness geht: wer zuerst präsentiert, wer die Karte bekommt, wer die unangenehme Aufgabe übernimmt. Ein Mischen, das stillschweigend bestimmte Anordnungen bevorzugt, ist eine manipulierte Ziehung, die niemand sehen kann. Hier läuft Fisher-Yates mit schrumpfendem Bereich, geprüft dadurch, dass gezählt wird, wie oft jede Anordnung auftritt, ein Test, der bei genau dem oben beschriebenen Fehler fehlschlägt.
Namen werden an Zeilenumbrüchen und an Kommas getrennt, sodass sowohl das Einfügen einer Tabellenspalte als auch das Tippen von Hand funktioniert. Leere Zeilen und überzählige Leerzeichen fallen weg. Nichts, was Sie einfügen, verlässt Ihren Browser: Die Ziehung läuft auf Ihrem eigenen Rechner, und die Liste wird nirgendwo gesendet oder gespeichert.