@blantcat

Как равномерно разыграть подарки?

День добрый.
Есть диапазон дат когда действует розыгрыши, например с 2017-05-05 до 2017-06-05. И есть n подарков, например 10. Их нужно разыграть так, чтобы не было 10 выигрышей в 1 день, а было равномерное распределение по всему диапазону дат.

Подскажите, пожалуйста, наиболее простое решение этой задачи.
  • Вопрос задан
  • 339 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега PHP
♬♬
Уточнения:
нужно N событий псевдослучайно распределить по времени так, чтобы в «ячейку» одного дня не попадало больше, чем K событий. При этом запрос с параметрами приходит разово, и нужно сразу ответить выигрышный он или нет.

Решение: динамически считать вероятность выигрыша, в зависимости от текущей даты, числа выигрышей в этот день и остатков: призов и дней до окончания.

Вероятность, в итоге может быть нулевой (если достаточно выигрышей в этот день), 100%, если остаток призов велик, а дней недостаточен, и где-то между 0 и 100% в остальных случаях. Формулу составьте сами.

Для вероятности $prob от 0 до 100% выигрыш определять примерно так:
$win = rand(1, 100) <= $prob;
if( $win) { // вы выиграли! }


Старый ответ:
Действительно случайное распределение не исключает попадания в т.ч. и 10 розыгрышей на 1 день. Но т.к. ваша аудитория не искушена в теории вероятностей, просто воспользуйтесь N раз сервисом random.org:
  1. если N < числа дней выберите N дней из диапазона;
  2. в эти дни разыгрывайте по 1 призу – на том же change.org с прямой видеотрансляцией процесса.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Эмммм... Cron через каждые 3 дня?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы