Pyth , 11 байт
WOyG~ZtOT)Z
Примечание: эта программа, вероятно, завершится с ошибкой памяти на любом реальном компьютере. Чтобы проверить это, попробуйте заменить G
более короткой строкой, такой как в этом коде, которая генерирует числа в среднем около 28000:
pyth -c 'WOy"abcdefghijklm"~ZtOUT)Z'
Этот код зацикливается, добавляя случайное число от -1 до 8 Z
с вероятностью 2 ^ -26 выхода из цикла при каждом повторении. Вероятность 2 ^ -26 достигается выбором случайного элемента ( O
) из набора всех подмножеств ( y
) алфавита ( G
).
Технические детали и обоснование:
Вероятность 2 ^ -26 определяется двумя фактами: y
при вызове последовательностей это функция набора мощности, которая строит список всех подмножеств входных данных. Поскольку G
длина входного файла составляет 26 символов, в этом наборе мощности yG
содержится 2 ^ 26 записей. OyG
выбирает случайный элемент из этих 2 ^ 26 записей. Именно одна из этих записей, пустая строка, при передачеW
в цикл while. Таким образом, существует вероятность 2 ^ -26 выхода из цикла каждый раз.
В любом фиксированном количестве циклов цикла K вероятность получения числа K * 3,5 + m и получения K * 3,5 - m равна, потому что каждая последовательность суммирований, которая достигает одного итога, может быть инвертирована, -1 -> 8, 0 -> 7 и т. Д., Чтобы добиться другого. Кроме того, числа ближе к K * 3.5 явно более вероятны, чем числа дальше. Таким образом, если K> 2000000 / 3.5 = 571428.5, вероятность получения числа свыше 1000000 превышает 75%, поскольку некоторые из результатов, превышающих это число, можно сопоставить один к одному со всеми результатами ниже этого число, а верхняя половина меньше, может быть приведено в соответствие один к одному с теми, кто меньше 1000000. Вероятность получения не менее 571429 циклов составляет (1-2 ^ -26) ^ 571429, что не менее чем (1-2 ^ -26 * 571429), ожидаемое количество выходов из цикла за первые 571429 попыток, что составляет 99,1%. Таким образом, в 99,1% или более испытаний существует 75% или более шансов получить как минимум 1000000, так что существует более 50% шансов получить более 1000000.
Этот код основан на поведении, O
когда ошибка была случайно введена 3 дня назад и была исправлена сегодня. Он должен работать на любой версии Pyth 3 до 22 декабря или после сегодняшнего дня. Следующий код эквивалентен и всегда работал:
WOyG~ZtOUT)Z