Случайные числа и честная жеребьёвка: как выбрать победителя
Розыгрыш призов среди подписчиков, распределение задач в команде, выбор доклада из двадцати заявок — везде нужен случайный выбор. И везде возникает один и тот же спор: «а точно ли случайно?». Человек — плохой источник случайности: мы избегаем одни числа и выбираем другие, а «подбросить монетку в уме» не получается в принципе. Поэтому честную жеребьёвку делают инструментом, а результат показывают всем участникам.
Что делает выбор случайным
Случайность — это про непредсказуемость до самого момента выбора. Обычный rand() в простой программе предсказуем: зная начальное значение, можно воспроизвести всю последовательность. Для серьёзной жеребьёвки используют криптографический источник случайности — тот же, что генерирует ключи шифрования. Предсказать его выход — значит сломать шифр, а это человечество пока не умеет.
Три сценария жеребьёвки
- выбрать одно число из диапазона — для розыгрыша по номерам;
- выбрать победителя из списка участников — каждый с равным шансом;
- вытянуть несколько уникальных номеров — лотерейный формат без повторов.
Все три сценария закрывает генератор случайных чисел: диапазон с опцией «без повторов», режим кубиков для игр и лотерейный розыгрыш уникальных чисел. Результат формируется в вашем браузере и виден сразу — записывайте его при участниках.
Как сделать жеребьёвку убедительной
- опубликуйте полный список участников ДО розыгрыша — чтобы никто не был добавлен задним числом;
- проводите выбор инструментом при свидетелях или на записи экрана;
- покажите сам выбор, а не только результат — источник случайности должен быть виден;
- зафиксируйте правило заранее: что считается победой, что происходит при отказе от приза.
Доверие к жеребьёвке строится на прозрачности процедуры, а случайный генератор — лишь честный арбитр внутри неё. Когда процедура открыта, спорить не о чем.
Частые вопросы
Чем случайные числа отличаются от псевдослучайных?
Псевдослучайные генерируются формулой: последовательность выглядит случайной, но воспроизводится от одного и того же «зерна». Для жеребьёвки этого достаточно, для криптографии — нет: там нужны аппаратные генераторы, как crypto.getRandomValues в браузере.
Как честно разыграть приз по списку участников?
Пронумеруйте участников и возьмите случайное число в диапазоне от 1 до количества номеров. Важно объявить правила до розыгрыша и использовать один генератор — смена инструмента между попытками выглядит подозрительно.
Может ли генератор выдать одно и то же число дважды?
Может: случайность не запрещает повторы. Если нужны неповторяющиеся номера (как в лотерее «без возвращения»), выпавшие числа исключают из диапазона или используют перемешивание списка. Быстро повторить фразу нужное число раз можно в повторителе текста, а прикинуть долю выигрышей от общего числа участников — в калькуляторе процентов.