Введение
Вам дан случайный целочисленный генератор со следующей реализацией
- Первый вызов всегда возвращает 1.
- Второй вызов возвращает случайное целое число от 1 до 2.
- Третий вызов возвращает случайное целое число от 1 до 3.
- N-й вызов возвращает случайное целое число от 1 до n включительно.
Основываясь на вышеупомянутой функции, напишите генератор случайных костей, который является совершенно случайным, возвращая значение от 1 до 6 (включительно) с равной вероятностью.
правила
- Ваша программа / функция должна приводить к случайному целому числу от 1 до 6 включительно в некоторой пригодной для использования форме, т. Е. К стандартному выводу или в качестве возвращаемого значения функции.
- Вышеуказанный генератор восходящих случайных чисел может быть определен как «свободная» функция в вашей программе (т. Е. Не учитывается при подсчете количества символов) или как отдельный скрипт / программа, которая выполняется по мере необходимости, при условии сохранения состояния (
n
) между звонками. - Предположим, что в одном случае использования вашей программы будет запрошено не более 1000 бросков игральных костей, и первоначальный генератор случайных чисел может быть сброшен
1
в конце 1000 бросков игральных костей, чтобы избежать переполненияn
. - Ваша программа не может использовать какой-либо другой источник случайных чисел, кроме генератора случайных чисел по возрастанию, определенного выше. Конечно, вы можете запросить несколько случайных чисел у генератора случайных чисел для каждого отдельного результата броска костей.
- Это код-гольф, поэтому победитель - самый короткий ответ или большинство голосов в случае ничьей. Если вы можете сгенерировать 1000 бросков костей, используя менее 1000 сгенерированных случайных чисел, дайте себе 10-очковый бонус эффективности .
пример
./asc-rand
1 # random integer between 1 and 1
./asc-rand
1 # random integer between 1 and 2
./asc-rand
3 # random integer between 1 and 3
./asc-rand
4 # random integer between 1 and 4
# dice-gen generates random dice based on output of asc-rand program.
./dice-gen
3
./dice-gen
6
./dice-gen
5
./dice-gen
1
iterate(6):b=asc-rand(); print b
незаконна или не работает? Я мог бы неправильно понять третье правило.