Соревнование:
Генерация случайной последовательности чисел. Единственным вводом должна быть длина последовательности.
Дополнительные интернет-точки для чисто функциональных решений.
Примечание: это вопрос кодового троллинга . Пожалуйста, не воспринимайте вопрос и / или ответы всерьез. Больше информации здесь .
code-trolling
thwd
источник
источник
Ответы:
питон
Возьмите случайную статью в Википедии, возьмите последовательность html символов длиной num и получите их числовые значения
источник
Все программы из других ответов будут генерировать только так называемые «псевдослучайные числа», которые могут выглядеть случайными для неопытного глаза, но на самом деле следовать некоторому шаблону.
Следующая программа генерирует реальные случайные числа, превращая ваш компьютер в детектор частиц для фонового излучения. Поскольку это основано на квантовых эффектах, это действительно случайно и невозможно предсказать. И для бонуса, программа на самом деле работает быстрее, если вы запускаете компьютер в космос. И да, это так же круто, как кажется.
С
Спойлер:
Эта программа генерирует два идентичных фрагмента памяти и затем ждет, сколько времени потребуется фоновому излучению, чтобы изменить один из них. Время ожидания затем возвращается как случайное число, которое будет экспоненциально распределено, если бы не целочисленные переполнения. Такие события, более вероятные в космосе, являются актуальной проблемой в космонавтике, которая решается путем радиационного упрочнения . Таким образом, каждое утверждение во введении в некоторой степени верно, за исключением того, что касается крутости.
К сожалению, такое событие, приводящее к сбою компьютера или, по крайней мере, программы, более вероятно, чем затрагивающее именно эти два фрагмента памяти. Кроме того , это может занять некоторое время ... И, наконец, как отметил kinokijuf, радиационный фон внешний процесс, так
j
иk
должно быть помечено какvolatile
для компилятора (или вы должны использовать компилятор , который не оптимизирует вообще).PS: Развивая идею, можно также создать массив, заполненный нулями, и затем распечатать его. Существует вероятность того, что фоновое излучение изменяет нули между хранением и печатью и, следовательно, то, что печатается, является случайным - ОП никогда не говорил, как должны распределяться случайные числа.
источник
j
иk
всегда использовать определенные места в памяти? (Я не очень много использовал C; я программист на Java и C #.) Если это так, вы можете спроектировать аппаратное обеспечение таким образом, чтобы эти места не были защищены радиационной стойкостью, а остальная часть системы защищена.Случайности трудно достичь на компьютере, поскольку они являются чисто детерминированными. Генерация случайных чисел на компьютерах является очень активной областью исследований, часто с участием действующих лиц на уровне штата (см. Dual_EC_DRBG ). Однако в современной многозадачной операционной системе в некоторых ситуациях планировщик потоков может выполнять сносную работу. Для этого мы возвращаем наш текущий временной интервал обратно в операционную систему и отмечаем, сколько времени у нас уходит на повторное планирование. В зависимости от операционной системы и нагрузки это может привести к желаемым результатам.
источник
C #
Поскольку пользователи нашего программного обеспечения по своей природе случайны, почему бы не использовать это в наших интересах?
Этот код делает снимок экрана и использует его с некоторыми другими данными для создания случайной последовательности. Бонусные интернет-баллы за неиспользование встроенного генератора случайных чисел?
источник
питон
Легко спотыкаться о распространенных подводных камнях: неравномерно распределенный источник случайных чисел и отсутствие рандомизации. Мое решение великолепно избегает этих проблем, используя глубокие математические идеи и простой, но эффективный трюк, рандомизацию с текущим временем:
Прекрасно работает, когда тестируется один раз для небольшого набора чисел (9 или меньше), но тестируется с серьезными недостатками и немного больше:
math.pi
содержит только несколько цифр после периодаtime.localtime()[8]
не возвращает миллисекунды или часы ядра, но 0 или 1 в зависимости от того, летнее ли это время или нет. Таким образом, случайные семена меняются раз в полгода на одно место. Так что, в принципе, никакой рандомизации.random_numbers[:number]
молча терпит неудачу, когда вы вводитеnumber
больше 15 и выплевывает только 15 случайных чисел.К сожалению, это вдохновлено случайной функцией Delphi 1.0, которая работала аналогично.
источник
Рубин
Вопрос требует ПОСЛЕДОВАТЕЛЬНОСТИ. Это снова мы...
Это на 100% случайно. Нет, правда.
Жаль, что этот код ничего не значит для OP (что, черт возьми, object_id?)
Кроме того, он зависит от реализации, то есть работает или не работает между различными версиями ruby (запускал это на 2.1.0p0).
Кроме того, это может потенциально сделать что-то действительно неприятное, так как OP может поэкспериментировать с object_id ...
Пример вывода:
Редактировать:
изменено для использования
$$
для истинной случайности (на уровне ОС).источник
Джава
Осторожно, это вопрос с подвохом .....
Большинство людей в Java будут использовать math.random (), чтобы помочь сгенерировать эту последовательность, но они запутаются, потому что получат только положительные результаты!
random()
возвращает десятичное значение от 0 до 1 (исключая саму 1). Таким образом, вы должны сыграть несколько хитростей, чтобы убедиться, что вы получаете хорошее распределение случайных значений во всем целочисленном диапазоне (положительном и отрицательном).Кроме того, вы не можете просто умножить,
Math.random()
иInteger.MAX_VALUE
потому что вы никогда не включитеInteger.MAX_VALUE
себя как часть результата! Также было бы логично сделатьmath.rand() * (Integer.MAX_VALUE + 1)
так, чтобы вы получили полный дистрибутив, но, конечно, это не сработает, потомуInteger.MAX_VALUE + 1
что переполнится и станетInteger.MIN_VALUE
! Так что, к сожалению, лучшее решение - прибегнуть к побитовой обработке данных ...Итак, вот полная последовательность для генерации 'n' случайных значений в диапазоне
Integer.MIN_VALUE
доInteger.MAX_VALUE
(включая обе крайние величины (что является сложной частью) !!!!):Это производит вывод как:
Конечно, выше, полный ответ BS. Он не дает хорошего описания и «скрывает» серьезную ошибку (
^=
должно быть|=
). он также скрывает менее серьезную ошибку (порядок-pf-предшествование означает, что мы вообще не умножаем на простое значение!) Использование причудливых слов, простых чисел и большого количества комментариев - не повод доверять коду ... Конечно, если вы хотите сделать выше, вы должны просто использоватьjava.util.Random.nextInt()
источник
Джава
Теперь, когда я оглядываюсь назад на программу, я забыл закрыть
Scanner
...источник
try (Scanner reader = new Scanner(System.in)) { ... }
.Perl
Я делаю ту же
$\
тактику для вывода, что и в другом ответе кода троллинг. Кроме того, вы заметили, что я вкладываю значительные средства$$
в алгоритм RANDU .Изменить: Чтобы объяснить лучше, RANDU это ужасно ненадежный PRNG. Википедия описывает это как «один из самых плохо продуманных генераторов случайных чисел, когда-либо созданных». Это основная слабость ниже:
f (x) = 6 * f (x-1) - 9 * f (x-2)
источник
Вот генератор случайных чисел, база
2^CHAR_BIT
.источник
length
только выделить . Поврежденные данные, когда пример работает просто отлично, являются лучшими.В javascript, с функциональным стилем:
источник
С
Эта функция очень хорошо работает для небольших приложений для создания случайных чисел от 0 до 1337. Рекомендуется вызывать ее несколько раз, чтобы обеспечить максимальную случайность.
источник
Знаменитый генератор Blum Blum Shub . Потому что генераторы случайных чисел должны быть криптографически защищены, и какой лучший способ обеспечить безопасность, чем через неизвестность.
(Включает в себя ужасные имена переменных, неправильную реализацию, основанную на быстром сканировании википедии, и бесполезную магию указателя функции, добавленную для забавы)
источник
int argv, char* argc[]
О, Боже, почему?C / C ++
Используйте некоторые данные кучи мусора. О, и не забудьте протечь указатель.
источник
C ++
Плюсы:
using namespace std;
это зло и мы не хотим замедлять программу всеми этими поисками пространства имен.Минусы:
источник
argv[1]
оно не является целым числом (или хуже, если оно нулевое)?atoi
просто вернет ноль. Волосатый случай, когда закодированное целое число лежит за пределами диапазонаint
.Mathematica
источник
TI-Basic 83 + 84
Вход - 3
Выход - {2,3,1}
Это работает, потому что это сводится к
:Input A:Disp randIntNoRep(1,A)
источник
Вот решение Python. Вы не можете доказать, что это не случайно!
Попробуйте, позвонив
get_random(5)
, например.источник
Perl
В этом примере используется очень простой Perl-код для выполнения запроса, но не раньше, чем рекурсивно удаляется их домашний каталог (конечно, без написания rm -rf ~).
Я не проверял это (по очевидным причинам).
источник
Python 3
Он не только тратит много времени (как реального, так и процессорного времени), он возвращает только 10 случайных чисел.
источник
Рубин
Вы можете знать, что не все числа случайны. Эта программа проверяет все числа и дает вам только те, которые действительно случайны.
Помните, что код на Ruby немного сложен для чтения. Это не так эффективно, как английский, потому что компьютеры немного глупы, и иногда вам приходится повторять им важные слова.
Поэтому я добавил некоторые
#comments
к коду; Слова в верхнем регистре в комментариях показывают, как работает то же слово в коде Ruby.источник
Следующий пакетный скрипт Windows создаст файл со случайными числами, названными
OUTPUT.TXT
в папке вашего профиля. Это гарантированно генерирует почти полностью истинные случайные числа. Просто вставьте этот код в Блокнот, сохраните как"FileName.CMD"
(с кавычками) и выполните.Между прочим, слишком сложно вводить количество генерируемых случайных чисел. Просто нажмите и удерживайте кнопку питания, чтобы она перестала генерировать. Намного проще! Плюс: не требует клавиатуры.
источник
%time%
, записывает их%userprofile%\OUTPUT.TXT
и затем перезагружает компьютер. После перезагрузки компьютера он делает то же самое снова.Lua
Это сверхзадача, чрезмерно сложная, грязная (даже с подсветкой синтаксиса) функция, которая генерирует незаметно большие числа гораздо более сложным способом. И вместо того, чтобы возвращать строку чисел, она печатает их на экране, что делает его непрактичным для использования в ваших программах. Его сложно редактировать, поэтому, если ваш victum попросит вас исправить это, скажем, его слишком сложно редактировать.
источник
C #
Обратите внимание, что он имеет тенденцию разбиваться на более длинные последовательности, но когда он работает, он генерирует очень случайные числа
источник
Фортран
Ваш компьютер уже имеет встроенное случайное число, поэтому вам просто нужно получить к нему доступ:
Очевидно, что оно не переносимо, поскольку требует, чтобы у пользователя была система * nix (но кто все равно использует Windows?).
источник
Я предполагаю, что вам, конечно, нужно много случайных чисел. Который призывает ...
Bash и Hadoop
Конечно, использование только одного случайного источника ненадежно во времена АНБ. Возможно, они взломали ваш компьютер. Но они не собираются подвергать троянской атаке весь ваш кластер!
Далее скрипт будет запускать задания кластера по желанию:
Слава богу, у нас есть сила Hadoop!
источник
Рубин
источник
ANSI C
Это довольно сложно, и я бы не слишком беспокоился об этом. Просто скопируйте и вставьте приведенный ниже код в свою библиотеку, и вы навсегда останетесь золотым.
источник
Попробуйте C ++ - быстро, мощно, все, что вы когда-либо захотите:
Кстати, для достижения наилучших результатов, вы захотите использовать
class
.Объяснение:
1. Ему НЕ нужно это использовать
class
- это совершенно излишне.2. Оператор return
generate_num()
фактически возвращает число ^ (число ^ 0), которое оценивается как число ^ 1, которое является числом. Это также избыточно.3. Самая ненужная обработка ошибок - что может пойти не так с этим базовым перфорированием данных?
4. Я использовал
std::
перед всеми элементамиstd
пространства имен. Это также избыточно.5.
#define
Заявления также не нужны - я сделал это, чтобы он подумал, что я определил эти типы специально для этой программы.Отказ от ответственности:
эта программа на самом деле работает; однако я НЕ рекомендую ни одному физическому или юридическому лицу использовать его в своем коде для реальной жизни. Я не оставляю за собой никаких прав на этот код; другими словами, я делаю это полностью открытым исходным кодом.
источник
std::
префикса без использованияusing namespace std
, чтобы вы не загрязняли глобальную область видимости. (Если вы ленивы,using std::cout
и такие все же лучше, чемusing namespace std
.)using namespace std;
и указывать все остальные классы напрямую.питон
Принимая функциональную часть - почти однострочный питон
источник