У друга в компьютере есть дополнительная карта, которая генерирует совершенно случайное число от 1 до 5 включительно. К сожалению, они как-то пролили колу, и теперь она генерирует только 2 для всех чисел от 1 до 4. К счастью, случайность сохраняется, но вероятность 2 равна 80%, вероятность 5 - 20%, а 1, 3 или 4 сгенерированы. Используя этот случайный источник (назовите его BrokenRand()
или что-то подобное), напишите работающий генератор случайных чисел, который производит числа от 1 до 5 с вероятностью равной 20% с той же идеальной случайностью, что и исходный источник.
Кратчайшая программа выигрывает. Бонусные баллы начисляются за минимальное количество BrokenRand
беспристрастных звонков с помощью демографически отобранных консультантов, специализирующихся на обслуживании клиентов, с разбивкой по возрасту и полу - т.е. мне.
источник
Скала 79 символов:
Теперь для настоящего гольфа defactRNG alias brokenRand переименован в b.
Как это работает: Чаще всего b возвращает последовательность 2s. Но если вы сделаете 5 вызовов на b, вы очень часто закончите с результатом 4x2 и 1x5, это второе наиболее вероятное событие, и может быть 5-2-2-2-2, 2-5-2-2 -2, 2-2-5-2-2, 2-2-2-5-2 и 2-2-2-2-5.
Общее у них то, что сумма равна 4 * 2 + 5 = 13. Индекс первых пяти можно использовать для определения действительного случайного числа. Если больше или меньше одного 5, сумма больше или меньше 13, повторите.
Счетчик в 'rnd' aka 'r' может показать, сколько вызовов необходимо в среднем, чтобы получить числа. На 50 000 случайных номеров поступило 121 200 звонков, что не впечатляет. :)
источник
> <> (Рыба) - 55 байт
Обновлен, чтобы использовать тот же алгоритм, что и @user unknown в своем ответе scala
Он ожидает, что сломанный генератор будет подключен к stdin; вот скрипт Python, который я использовал . Код соответствует текущей спецификации Fish, но я использовал модифицированную версию старого интерпретатора.
Я бы сделал большую выборку, но она медленная.
источник
GolfScript, 23 байта
Поздний ответ, но так как это только что появилось на первой странице ...
Использует тот же алгоритм, что и решение Scala от неизвестного пользователя . Предполагается, что смещенный генератор случайных чисел задан как подпрограмма GolfScript с именем
r
; Вы можете определить подходящий смещенный RNG самостоятельно, например, как:Вот быстрый тест, демонстрирующий отсутствие предвзятости. К сожалению, онлайн-сервер GolfScript работает довольно медленно, поэтому мне пришлось сократить демонстрацию до 100 образцов, чтобы завершить ее вовремя. Если тест выполняется локально с помощью интерпретатора GolfScript , попробуйте увеличить
100*
до1000*
или даже10000*
.(Сервер GolfScript также иногда произвольно зависает и останавливается в любом случае. Если это происходит для вас, повторная попытка обычно решает его. Это происходит и с другим кодом, и происходит только на сервере, а не на моем собственном компьютере, поэтому я уверен что это проблема с сервером, а не с моим кодом.)
источник
JavaScript, 160 символов без снижения читабельности ака оптимизация
источник
BrockenBand()
же тогда?BrockenRand
function giveRandom(){return Math.ceil(Math.random()*5)}