fixmint
PL

Jak uczciwie wylosować zwycięzców konkursu i pokazać, jak to zrobiono

Autor: · · zaktualizowano 8 listopada 2026 · czas czytania: 4 min

Żeby wylosować zwycięzcę uczciwie, użyj generatora stworzonego z myślą o bezpieczeństwie, daj każdemu zgłoszeniu takie samo prawdopodobieństwo i pozwól ludziom sprawdzić wynik po fakcie. Większość nieuczciwości w prostym losowaniu bierze się z jednego z dwóch miejsc: słabego źródła losowości albo drobnego błędu arytmetycznego zwanego obciążeniem modulo. Oba problemy da się naprawić. Opublikowana lista zgłoszeń i zapis losowania to najlepszy dowód, że nikt nie wybrał zwycięzcy ręcznie.

LosowanieWylosuj zwycięzcę uczciwieZrób to za darmo

Losowość prawdziwa i pseudolosowość

Prawdziwe źródło losowości czerpie nieprzewidywalność z procesu fizycznego, na przykład z szumu elektronicznego. Generator pseudolosowy to wzór. Zaczyna od ziarna (ang. seed), wykonuje deterministyczne kroki i daje ciąg, który wygląda na losowy. Ciąg jest w pełni określony przez ziarno, więc ktoś, kto zna ziarno i wzór, może przewidzieć każdą liczbę.

Większość oprogramowania korzysta z generatorów pseudolosowych i to wystarcza, by przetasować playlistę albo wylosować poziom w grze. Przy losowaniu, w którym ktoś może coś wygrać, liczy się pytanie, czy ktoś mógłby przewidzieć albo wpłynąć na wynik. Generator szybki, ale przewidywalny, to złe narzędzie.

Użyj kryptograficznego generatora przeglądarki

W JavaScripcie Math.random() to szybki generator pseudolosowy. Jego dokumentacja mówi, że nie nadaje się do kryptografii, a losowanie nagród to wybór wrażliwy na kwestie bezpieczeństwa. Funkcja Web Crypto crypto.getRandomValues() wypełnia tablicę wartościami z kryptograficznego źródła losowości systemu operacyjnego. To właśnie należy stosować. Losowanie używa jej przy każdym wyborze, również przy rzutach monetą i kostką. Narzędzie, które nie mówi, czego używa, trudniej zaufać, więc zanim na nim polegasz, zapytaj.

Obciążenie modulo na jednym przykładzie

Załóżmy, że źródło zwraca losowy bajt, czyli liczbę całkowitą od 0 do 255, a ty chcesz wybrać jedno z trzech zgłoszeń. Najprostsza droga to wziąć resztę z dzielenia przez 3. Wygląda to uczciwie, ale 256 nie dzieli się równo na grupy po trzy.

  • Wartości 0, 3, 6 i tak dalej aż do 255 dają resztę 0. Jest ich 86.
  • Wartości dające resztę 1 jest 85, a wartości dające resztę 2 także jest 85.

Zatem zgłoszenie 0 wypada 86 razy na 256, czyli około 33,6%, a zgłoszenia 1 i 2 po 85 razy, czyli około 33,2%. Różnica jest niewielka, ale rzeczywista i rośnie, gdy liczba zgłoszeń jest duża w porównaniu z zakresem źródła.

Rozwiązaniem jest próbkowanie z odrzuceniem. Losujesz wartość i jeśli trafi ona w nierówną resztę, losujesz ponownie. W przykładzie z bajtem odrzucasz 255 i akceptujesz tylko wartości od 0 do 254, które dzielą się równo przez trzy. Przy 32-bitowej liczbie losowej nierówna reszta to około jedna wartość na 4,3 miliarda, więc obciążenie przy konkursie jest pomijalne. Mimo to porządny losownik powinien to obsłużyć, bo ten sam błąd narasta, gdy zakres się kurczy.

Losowania bez powtórzeń

Jeśli potrzebujesz kilku zwycięzców, losowanie trzy razy indeksu może wskazać ten sam wpis dwa razy. Dwie czyste metody temu zapobiegają:

  1. Usuń każdego zwycięzcę z listy, a potem losuj ponownie spośród pozostałych.
  2. Przetasuj całą listę raz metodą Fishera–Yatesa, a potem weź zwycięzców z góry.

Fisher–Yates przechodzi listę od końca, zamienia każdą pozycję z losowo wybraną pozycją na tej samej lub wcześniejszej pozycji i przy uczciwych losowaniach daje każdą kolejność z jednakowym prawdopodobieństwem. Jest krótka, dobrze znana i łatwa do wyjaśnienia uczestnikom. Opcje Usuń zwycięzców i Bez powtórzeń w losowaniu obsługują obie metody.

Spraw, by losowanie dało się sprawdzić

Uczciwe losowanie to takie, które każdy może zweryfikować. Przed losowaniem:

  • Opublikuj zgłoszenia jako ponumerowaną listę wraz z zasadami, kto mógł wziąć udział.
  • Opublikuj odcisk SHA-256 tej listy. Każde narzędzie SHA-256 może go wygenerować, na przykład generator skrótów. Odcisk zmienia się całkowicie, gdy zmieni się choćby jeden wpis, więc listy nie da się po cichu edytować. Ta sama kontrola potwierdza pobrane pliki; jak sprawdzić sumę kontrolną SHA-256 pobranego pliku pokazuje kroki.

Podczas losowania i po nim:

  • Nagraj ekran od chwili uruchomienia losowania do wyświetlenia wyniku.
  • Opublikuj ostateczną listę z numerem zwycięzcy, aby ludzie mogli obliczyć odcisk jeszcze raz i upewnić się, że nic się nie zmieniło.
  • Napisz, jak wybrano zwycięzcę, na przykład „wylosowano narzędziem działającym w przeglądarce, które korzysta z kryptograficznego źródła losowości systemu operacyjnego”.

Zasady konkursów różnią się w zależności od platformy, a losowania nagród mogą podlegać wymogom prawnym zależnym od miejsca zamieszkania. Przed przeprowadzeniem sprawdź regulamin promocji platformy i prawo obowiązujące w twoim kraju. To ogólna wskazówka, a nie porada prawna. Gdy będziesz gotowy, wylosuj zwycięzcę narzędziem Losowanie.

Jak to zrobić w fixmint

  1. Wybierz Imiona, a potem wklej zgłoszenia w polu Imiona, jedno w wierszu.
  2. Ustaw Zwycięzcy na liczbę nagród. Zaznacz Usuń zwycięzców z listy, aby nikt nie wygrał dwa razy.
  3. Przy losowaniu z numerami wybierz Numer, ustaw Najmniejszy i Największy, a jeśli każdy numer może wygrać tylko raz, zaznacz Bez powtórzeń.
  4. Naciśnij Wylosuj zwycięzców, mając wcześniej uruchomione nagrywanie ekranu od samego początku.
  5. Opublikuj ponumerowane zgłoszenia, odcisk SHA-256, wpis zwycięski i informację, jak użyto losownika.

Szybkie odpowiedzi

Czy Math.random() wystarczy do konkursu?

Wystarczy do gier i tasowania, ale nie do losowania, które ludzie będą sprawdzać, bo jego wynik można przewidzieć. Użyj kryptograficznego źródła.

Dlaczego nie wziąć po prostu losowej liczby modulo liczba zgłoszeń?

Gdy zakres nie dzieli się równo, reszta jest nierówna, więc niektóre zgłoszenia mają nieznacznie większą szansę. Próbkowanie z odrzuceniem usuwa to obciążenie.

Czy mogę wylosować kilku zwycięzców w jednym losowaniu?

Tak. Usuń każdego zwycięzcę przed kolejnym wyborem albo przetasuj listę raz i weź wpisy z góry. W obu przypadkach żaden wpis nie wygra dwa razy.

Przetłumaczone z Wersja angielska przy wsparciu AI.

Komentarze

    Brak komentarzy. Bądź pierwszy.

    Twoja ocena (opcjonalnie)

    Twój e-mail nigdy nie jest pokazywany ani zapisywany.

    Okładka: The Paperoom Game Night KitThe Paperoom Game Night Kit

    52-stronicowy wieczór gier do wydrukowania: party bingo, łamigłówki, gry planszowe i bitwy na kartce z ołówkiem, a do tego planer i tabele wyników.

    $7.00Kup na GumroadPo angielsku