Wir haben eine kleine Verlosung für die Einführung von Toolz durchgeführt, und ich habe die Verlosung auf die faule Art und Weise durchgeführt: Ich habe die Teilnehmerliste in eine Tabelle eingefügt und eine Spalte hinzugefügt =RAND()‘und danach sortiert’ Es hat funktioniert, aber ein Freund, der beruflich Statistiken macht, schaute mir über die Schulter und sagte, & quot; du weißt, das ist eigentlich nicht einheitlich, oder? " Er hatte recht, und der Kaninchenbau, in den ich an diesem Abend fiel, ist ein großer Teil dessen, warum Toolz jetzt ein ordentliches Listen-zufallsgenerator Das mischt richtig, diesen Ratgeber habe ich gelernt, geschrieben für alle, die Namen aus dem Hut ziehen müssen und den Hut ehrlich haben wollen.
tl; dr: Ein Listen-Randomizer bestellt entweder eine ganze Liste nach dem Zufallsprinzip neu (Shuffle) oder zieht eine Zufallsstichprobe daraus (Pick).Die Guten verwenden den Fisher-Yates-Shuffle und eine kryptografische Zufallsquelle, sodass jede Bestellung gleich wahrscheinlich ist. Verwenden Sie Shuffle für Turn-Order und Sitzplätze sowie Pick für Giveaways und Samples. Dieses Tool läuft Client-seitig, zeichnet standardmäßig ersatzlos, sodass Gewinner einzigartig sind, und weigert sich, mehr eindeutige Elemente zu zeichnen, als die Liste zulässt.
Ich baue SaaS-Produkte auf Laravel und React, daher geht es mir hier um zwei Dinge: die richtige Mathematik zu finden und die Benutzeroberfläche so offensichtlich zu machen, dass man sich nie fragt, ob die Auslosung fair war. Beides spielt eine größere Rolle, als es klingt.
Was ist ein Listen-Randomizer?
Ein Listen-Randomizer nimmt eine Liste von Elementen, eines pro Zeile, und ordnet oder probiert sie zufällig neu. Ein fairer Shuffle ist ein gelöstes Problem mit einer falschen Antwort, die richtig aussieht: Die Sortierung nach einem zufälligen Schlüssel ist verzerrt, während dies beim Fisher-Yates-Shuffle nicht der Fall ist, und der Browser liefert die unvoreingenommenen Bits durch crypto.getRandomValues(). Fügen Sie Namen, Preise, Aufgaben, Teams oder Ideen ein und geben Sie entweder die gesamte Liste in einer gemischten Reihenfolge zurück oder wählen Sie die Anzahl der von Ihnen gewünschten Gewinner aus. Es handelt sich um die Softwareversion des Zeichnens gefalteter Zettel aus einer Schüssel mit dem Vorteil, dass dadurch die leise Voreingenommenheit beseitigt wird, die Menschen hervorrufen, wenn sie versuchen, " zu zufällig" von Hand.
Es gibt wirklich nur zwei Operationen, und zu wissen, welche man will, ist die gesamte Fertigkeit Shuffle gibt jeden Gegenstand zurück, den man ihm gegeben hat, nur in einer neuen zufälligen Reihenfolge, also wird nichts hinzugefügt oder verloren Pick gibt eine Teilmenge zurück, zieht eine festgelegte Anzahl von Gegenständen aus dem Pool Eine Verlosung ist eine Wahl Wer zuerst in einem Standup präsentiert, ist eine Mischung Die meisten Menschen greifen mindestens einmal nach der falschen, normalerweise versuchen sie, & quot; zu mischen und die ersten drei zu nehmen" wenn Pick mit einer Zählung von drei das Gleiche in einem Schritt tut.
Wie funktioniert eigentlich ein fairer Shuffle?
Hier ist der Teil, auf den mein Statistikerfreund hinaus wollte Der Tabellenkalkulationstrick, jede Zeile mit einer Zufallszahl zu belegen und zu sortieren, fühlt sich zufällig an, ist aber nicht einheitlich Sortieralgorithmen führen Vergleiche durch, und wenn zwei Zufallsschlüssel zufällig nahe beieinander liegen, treten winzige Verzerrungen in der Auflösung von Bindungen und Vergleichen in das Ergebnis ein Auf kleinen Listen ist der Skew klein, aber er ist real, und für alles, wo Fairness der Punkt ist, ist "close enough" keine großartige Antwort.
Die richtige Methode ist der Fisher-Yates-Shuffle, manchmal auch Knuth-Shuffle genannt, nachdem Donald Knuth die In-Place-Version populär gemacht hatte, Er wurde 1938 von Ronald Fisher und Frank Yates beschrieben und erhielt 1964 seine moderne Computerform von Richard Durstenfeld Die Idee ist einfach Gehen Sie die Liste vom letzten Element zum zweiten. Wählen Sie an jeder Position einen zufälligen Index vom Anfang der Liste bis einschließlich der aktuellen Position aus und tauschen Sie dann die beiden Elemente aus. Da jeder Swap aus einem schrumpfenden, genau definierten Bereich stammt, kommt jede der möglichen Bestellungen mit genau gleicher Wahrscheinlichkeit heraus. Sie läuft in linearer Zeit und berührt jedes Element einmal, und es braucht keinen zusätzlichen Speicher über die Liste hinaus.
der Listen-zufallsgenerator Verwendet diesen Algorithmus direkt Wenn man ersatzlos wählt, ist es derselbe Shuffle, der vorzeitig gestoppt wurde: die Liste mischen, dann die ersten N Items nehmen. Das garantiert, dass die Gewinner unterschiedlich sind und dass jede mögliche Gruppe von Gewinnern gleich wahrscheinlich ist.
Woher kommt die Zufälligkeit?
Ein Algorithmus ist nur so fair wie die Zufallszahlen, die ihn füttern, ist die Quelle der Zufälligkeit vorhersehbar oder voreingenommen, ergibt ein perfekter Shuffle dennoch ein verzerrtes Ergebnis Hier verdient der Browser seinen Keep.
Moderne Browser belichten crypto.getRandomValues, Teil der W3 C Web Cryptography API, die ein Array mit kryptographisch starken Zufallswerten füllt, die aus dem Entropiepool des Betriebssystems gezogen werden Das ist eine viel stärkere Quelle als Math.random, bei dem es sich um einen schnellen Pseudozufallsgenerator handelt, der nie für irgendetwas gedacht ist, bei dem es auf Vorhersehbarkeit ankommt. Der Randomizer bevorzugt crypto.getRandomValues Und fällt nur zurück auf Math.random Wenn die Kryptoquelle wirklich nicht verfügbar ist, was in einem aktuellen Browser fast nie der Fall ist.
Es gibt noch eine Subtilität, die ich richtig machen musste Um eine zufällige 32-Bit-Zahl in einen unvoreingenommenen Index von 0 bis N minus 1 zu verwandeln, kann man den Rest nicht einfach nehmen, nachdem man durch N dividiert hat, denn wenn N nicht gleichmäßig in den Bereich dividiert, kommen die niedrigen Indizes etwas häufiger auf Der Fix ist Rejection Sampling: Berechnen Sie das größte Vielfache von N, das in den Bereich passt, und wenn eine Ziehung über diesem Grenzwert landet, werfen Sie es weg und zeichnen Sie es erneut Es kostet eine vernachlässigbare Anzahl zusätzlicher Ziehungen und entfernt die Verzerrung vollständig Das Tool macht dies bei jedem Index, den es auswählt, was die Art von Details ist, die niemand bemerkt, bis es fehlt.
Wie verwende ich den Randomizer?
Die Benutzeroberfläche verfügt über eine Schaltfläche und ein paar Auswahlmöglichkeiten. So führe ich es aus.
Fügen Sie Ihre Liste in das Eingabefeld ein, ein Element pro Zeile Wenn Sie eine durch Kommas getrennte Zelle aus einer Tabellenkalkulation kopiert haben, schalten Sie den Eingabetrenner auf Komma und er teilt sich stattdessen auf Kommas auf. Das Trim- und Drop-Lank-Verhalten ist standardmäßig aktiviert, sodass verirrte leere Zeilen und versehentliche führende Leerzeichen nicht zu Phantomeinträgen werden.
Wählen Sie Ihren Modus Shuffle ordnet alles neu Pick zieht Gewinner Wenn Sie Pick wählen, erscheint ein kleines Panel, wo Sie einstellen, wie viele gezeichnet werden sollen und ob Wiederholungen erlaubt sind Lassen Sie Wiederholungen für ein Giveaway ab, so dass jeder Gewinner eine andere Person ist Schalten Sie Wiederholungen nur dann ein, wenn Sie tatsächlich Sampling mit Ersatz wünschen, zum Beispiel wenn Sie würfelartige Ziehungen simulieren und der gleiche Wert legitim wiederkehren kann.
Klicken Sie auf Zufällig machen Sie erhalten jedes Mal ein frisches, unabhängiges Ergebnis, also wenn Sie neu zeichnen möchten, klicken Sie einfach erneut Kopieren Sie die Ausgabe mit einem Klick, um sie in Ihre Ankündigung, Ihr Ticket oder wo auch immer das Ergebnis leben muss einzufügen Wenn Sie nach mehr eindeutigen Gewinnern fragen, als die Liste liefern kann, sagt Ihnen das Tool, anstatt leise eine kurze oder wiederholte Liste zurückzugeben, was ein Fehler ist, den ich bei anderen Tools gesehen habe.
In der Praxis sind die Listen, die ich einfüge, überall auf der Karte. An manchen Tagen ist es eine Spalte mit Kunden-E-Mails für eine Gewinnziehung, an anderen Tagen sind es die Namen in meinem Team, die die nächste Zuganfrage bewerten, und sobald es jedes Restaurant in fußläufiger Entfernung war, weil sich niemand für ein Mittagessen entscheiden konnte Dem Tool ist es egal, um welche Gegenstände es sich handelt, nur dass sie sauber getrennt sind Deshalb sind die Eingabemöglichkeiten eine Sekunde Aufmerksamkeit wert: Wenn Ihre Quelle eine Tabellenkalkulationszelle ist, rettet Sie der Komma-Trenner vor dem Ziehen vor einer Stray-Eingabe eine Minute, in der Sie nicht darüber streiten, ob Sie eine Stray-Eingabe als streiten.
Wann sollte ich mischen und wann sollte ich auswählen?
Die beiden Modi decken unterschiedliche Jobs ab und die folgende Tabelle enthält den Spickzettel, den ich zu Beginn gerne hätte.
| Du willst ... | einsetzen | Wiederholt | wieso |
|---|---|---|---|
| Entscheiden Sie sich für das Sprechen oder wenden Sie die Reihenfolge an | Mischen | n/a | Alle bleiben drin, Ordnung ist gerecht |
| Ziehen Sie einen Giveaway-Gewinner aus | Wählen Sie, zählen Sie 1 | Aus | Einzigartiges Ergebnis |
| Ziehen Sie mehrere Preisträger aus | Wählen Sie, zählen Sie N | Aus | Ausgezeichnete Gewinner, kein Double-Dipping |
| Weisen Sie Personen zwei Teams zu | Mischen, dann spalten | n/a | Teilen Sie die gemischte Liste in zwei Hälften |
| Probe mit Ersatz für eine Sim | Wählen Sie, zählen Sie N | Auf | Derselbe Artikel kann von Natur aus wiederkehren |
| Zufällige Auswahl einer Wiedergabeliste oder Leseliste | Mischen | n/a | Bestellen Sie, ohne etwas zu fallen |
Die Faustregel: wenn die Anzahl der Gegenstände gleich bleiben soll, mischen Sie, wenn Sie weniger Gegenstände heraus haben wollen, als Sie hineinlegen, wählen Sie aus Teamzuweisung ist die eine Person, die zu viel denkt Mischen Sie die vollständige Liste, dann nehmen Sie die erste Hälfte als Team A und den Rest als Team B, und beide Teams sind zufällig und ausgewogen in der Größe.
Ist es fair genug, eine öffentliche Verlosung durchzuführen?
Ja, und der Grund ist es wert, klar angegeben zu werden, denn & quot; fair" ist der gesamte Wert des Tools Die Kombination aus einem Fisher-Yates-Shuffle, einer kryptografischen Zufallsquelle und Ablehnungsstichproben bedeutet, dass jeder Teilnehmer eine identische Chance hat und jeder mögliche Satz von Gewinnern gleich wahrscheinlich ist Das ist eine stärkere Garantie als ein physischer Draw, bei dem Slipgröße, Falten und wie gut die Schüssel gemischt ist, führen alle zu Verzerrungen.
Da die Auslosung vollständig in Ihrem Browser ausgeführt wird, können Sie dies während eines Streams oder einer Besprechung live auf dem Bildschirm durchführen. Das ist die Transparenz, die die Leute von einer öffentlichen Auslosung erwarten. Es wird nichts an einen Server gesendet, daher gibt es keinen versteckten Schritt, bei dem das Ergebnis zwischen Ihrem Klick und der Ankündigung manipuliert werden könnte Wenn Sie einen Audit-Trail wünschen, zeichnen Sie die Auslosung per Bildschirm auf: Die Teilnehmerliste ist sichtbar, der Klick ist sichtbar und die Gewinner erscheinen sofort.
Ist meine Liste privat?
Das ist wichtiger, als es zuerst erscheint, denn die Listen, die Menschen randomisieren, sind oft nicht öffentlich Kandidaten-Shortlists, interne Teamnamen, Kundeneinträge und E-Mail-Listen sind alle sensibel Der Randomizer verarbeitet alles lokal mit einfachem JavaScript Ihre Liste wird nie hochgeladen, protokolliert oder gespeichert, und Sie können bestätigen, dass in Ihrem Browser-Netzwerk-Tab, wo das Klicken auf Randomize überhaupt keine Anfrage feuert Es funktioniert auch offline weiter, sobald die Seite geladen wurde.
Das ist eine bewusste Haltung gegenüber Toolz, und ich habe über die Begründung in der Notiz geschrieben Datenschutz in Online-Tools. Ein Randomizer ist ein gutes Beispiel dafür, warum es darauf ankommt: Die Eingabe ist oft eine Liste realer Personen, und eine Liste realer Personen ist genau die Art von Dingen, die Sie nicht in einem Anforderungsprotokoll auf einem Server haben möchten, den Sie noch nie geprüft haben.
Ein paar Gewohnheiten, die die Zeichnung sauberer machen
Reinigen Sie die Liste, bevor Sie zeichnen Schalten Sie ein, entfernen Sie Duplikate, wenn eine Person zweimal erscheinen könnte, so dass ein doppelter Eintrag nicht heimlich ihre Chancen verdoppelt Das Ablegen von Leerzeilen ist standardmäßig auf, aber es ist einen Blick wert, um sicherzustellen, dass eine nachlaufende Leerzeile nicht gezählt wurde.
Ordnen Sie die Zählung den Gewinnen zu. Im Pick-Modus stellen Sie die Zählung auf die genaue Anzahl der benötigten Gewinner ein und lassen Sie Wiederholungen aus. Wenn Sie drei Preise haben, ziehen Sie drei auf einmal, anstatt dreimal auf eine einzelne Ziehung zu klicken, wodurch vermieden wird, dass der umständliche Fall des gleichen Namens zweimal über separate Klicks angezeigt wird.
Offen neu zeichnen, nicht heimlich, Wenn ein Gewinner nicht teilnahmeberechtigt ist, entfernen Sie ihn und zeichnen Sie ihn vor dem Zuschauer neu. Die Fairness entsteht dadurch, dass der Prozess sichtbar ist, und nicht dadurch, dass das Ergebnis beim ersten Klick endgültig ist.
Behalten Sie es im Browser Wie bei jedem Tool, das ich versende, ist die lokale Verarbeitung die Standardeinstellung, da sie schneller und privat ist Wenn Sie ein persönliches Kit mit kleinen Dienstprogrammen zusammenstellen, ist die Zufallszahlengenerator Paart sich natürlich mit dem Randomisierer für numerische Ziehungen und dem breiteren Entwicklerproduktivitätstools Roundup erklärt, warum es sich lohnt, eine Browser-First-Toolbox zu erstellen.
Verwandte Tools, die einen Blick wert sind
Wenn zufällige Auswahl ein wiederkehrender Bedarf ist, sitzen einige Nachbarn in der Nähe. Die Zufallszahlengenerator Zeichnet Zahlen in einem Bereich mit der gleichen Zufälligkeit der Krypto-Klasse, was Sie wollen, wenn das Ding, das Sie auswählen, ein Wert ist und nicht ein Element aus einer Liste Die UUID-generator Erzeugt eindeutige Kennungen für Datensätze und Testdaten Die Passwortgenerator Wendet dieselbe starke Zufallsquelle auf die Herstellung sicherer Passwörter an Alle drei laufen im Browser ohne Signup, genau wie der Randomizer, und ich decke die Identifikatorseite dieser Familie in der Passwortgenerator-Leitfadendrohen
Häufig gestellte Fragen
Wie funktioniert der Listen-Randomizer?
Das Tool liest Ihre Liste einen Artikel pro Zeile und ordnet dann entweder jeden Artikel nach oder zeichnet die von Ihnen angeforderten Gewinner. Das Shuffling verwendet den Fisher-Yates-Algorithmus, der die Liste einmal durchläuft und jedes Element mit einer zufällig ausgewählten früheren Position austauscht, wodurch eine gleichmäßig zufällige Reihenfolge erzeugt wird. Die zufälligen Positionen kommen vom Browser-Kryptografiegenerator, sodass das Ergebnis wirklich unvoreingenommen ist.
Ist die Randomisierung tatsächlich fair?
Ja. Es schöpft aus crypto.getRandomValues, der kryptographischen Zufallsquelle, die in moderne Browser eingebaut ist, und verwendet Ablehnungsstichproben, so dass kein Index auch nur geringfügig wahrscheinlicher ist als ein anderer In Kombination mit dem Fisher-Yates-Shuffle hat jede mögliche Reihenfolge Ihrer Liste die gleiche Chance, was gerechter ist als manuelles Shuffling oder eine Tabellenkalkulationssortierung mit einem zufälligen Schlüssel.
Wie wähle ich einen zufälligen Gewinner aus einer Liste von Namen aus?
Fügen Sie Ihre Namen pro Zeile ein, wechseln Sie in den Auswahlmodus, setzen Sie die Zählung auf 1 und klicken Sie auf Zufällig. Das Tool gibt einen einzelnen zufälligen Namen zurück. Um mehrere Gewinner gleichzeitig zu ziehen, setzen Sie die Anzahl höher und lassen Sie die Wiederholungen deaktiviert, sodass jeder Gewinner einzigartig ist.
Was ist der Unterschied zwischen Shuffle und Pick?
Shuffle gibt Ihre gesamte Liste in einer neuen zufälligen Reihenfolge zurück, sodass nichts hinzugefügt oder entfernt wird, nur umgeordnet. Pick gibt eine Teilmenge zurück und zeichnet die Anzahl der Gewinner, die Sie aus der Liste angeben. Verwenden Sie Shuffle für Turn Order oder Seating und wählen Sie Werbegeschenke, Muster oder wählen Sie einige Personen aus einer größeren Gruppe aus.
Kann der gleiche Artikel mehr als einmal ausgewählt werden?
Nur wenn man Wiederholungen aktiviert Standardmäßig zeichnet der Pick-Modus ersatzlos, also jeder Gewinner ist ein anderer Artikel, was eine Verlosung oder ein Giveaway braucht Das Einschalten von Wiederholungen erlaubt das Sampling mit Ersetzen, wobei der gleiche Artikel wieder hochkommen kann, was für Simulationen nützlich ist.
Warum kann es nicht mehr eindeutige Gegenstände auswählen als meine Liste?
Ohne Wiederholungen muss jeder Gewinner ein bestimmter Punkt sein, sodass Sie nicht zehn eindeutige Gewinner aus einer Liste von acht ziehen können. Wenn dies passiert, sagt das Tool es Ihnen, anstatt ein falsches Ergebnis zurückzugeben. Senken Sie entweder die Anzahl, um Ihrer Listengröße zu entsprechen, oder aktivieren Sie Wiederholungen, damit Elemente wiederverwendet werden können.
Wird meine Liste auf einen Server hochgeladen?
Nr. Alle Parsing und Randomisierung laufen lokal in Ihrem Browser mit einfachem JavaScript, und es wird nichts übertragen, protokolliert oder gespeichert Sie können dies in Ihrem Browser-Netzwerk-Tab bestätigen, wo keine Anfrage gestellt wird, wenn Sie auf Randomize klicken Es funktioniert auch offline, sobald die Seite geladen wurde.
Kann ich es für eine Verlosung oder ein Werbegeschenk verwenden?
Ja. Fügen Sie Ihre Teilnehmer pro Zeile ein, verwenden Sie den Pick-Modus mit deaktivierten Wiederholungen und stellen Sie die Anzahl der Preise ein. Jeder Klick zeichnet einen frischen, unabhängigen Satz einzigartiger Gewinner. Da die Auslosung unvoreingenommen ist und clientseitig erfolgt, können Sie sie aus Gründen der Transparenz live auf dem Bildschirm ausführen.



