Ошибка игрока - это когнитивное искажение, в котором мы ошибочно ожидаем, что случившееся часто будет менее вероятным в будущем, а то, что не произошло через некоторое время, с большей вероятностью произойдет в ближайшее время. Ваша задача - реализовать конкретную версию этого.
Объяснение проблемы
Напишите функцию, которая возвращает случайное целое число от 1 до 6 включительно. Подвох: при первом запуске функции результат должен быть равномерным (в пределах 1%), однако каждый последующий вызов будет перекошен в пользу значений, которые были свернуты меньшее количество раз ранее. Конкретные детали заключаются в следующем:
- Жребий запоминает количество сгенерированных на данный момент чисел.
- Каждый результат взвешивается по следующей формуле:
- Например, если количество бросков до сих пор составляет , веса будут , то есть вы будете В 4 раза больше шансов бросить чем .
- Обратите внимание, что формула означает, что результат броска взвешивается так же, как
Правила и предположения
- Применяются стандартные правила ввода / вывода и запрещенные лазейки
- Ролики не должны быть детерминированными. (т. е. используйте PRNG, посеянный из энергозависимого источника, который обычно доступен как встроенный.)
- Ваш случайный источник должен иметь период не менее 65535 или быть истинной случайностью.
- Распределения должны быть в пределах 1% для веса до 255
- 16-битные RNG достаточно хороши, чтобы удовлетворить оба вышеуказанных требования. Достаточно большинства встроенных ГСЧ.
- Вы можете передать текущее распределение, если это распределение либо мутирует по вызову, либо распределение после броска возвращается вместе с броском штампа. Обновление дистрибутива / количества является частью этой проблемы .
- Вы можете использовать вес вместо подсчета. При этом всякий раз, когда вес падает до 0, все веса должны увеличиваться на 1 для достижения того же эффекта, что и при подсчете веса.
- Вы можете использовать эти веса в качестве повторений элементов в массиве.
Удачи. Пусть байты всегда будут в твою пользу.