Потому что не хватает простых задач по коду-гольфу :
Создайте произвольно неназванную программу или функцию, которая при любом значении 1 ≤ N ≤ 10000 выдает истинное значение вашего языка с псевдослучайной вероятностью 1 / N, в противном случае - False.
Обратите внимание, что требование к именованию было удалено. Не стесняйтесь редактировать ответы и оценки соответственно.
Некоторые языки используют 1 (или -1) и 0 для True и False, это тоже хорошо.
Пример:
Пример входных тестов:
4 -> True
4 -> False
4 -> False
4 -> False
4 -> False
4 -> True
4 -> False
4 -> False
Т.е. дано 4; он возвращает True с вероятностью 25% и False с вероятностью 75%.
N
мы должны принять?Ответы:
Шаблоны MediaWiki с ParserFunctions , 48 байт
источник
#time
, вероятно, для обновления возраста живых людей и т. д.Pyth, 3 байта
Попробуйте онлайн
Простая инверсия случайного выбора от 0 до ввода
Забавно, что в Pyth невозможно создать функцию, без которой это делается,
$
потому что функции Pyth автоматически запоминаются.источник
Q
заполнению в конце, как иначе, я бы ответил!O
;)CJam, 5 байтов
Должен быть быстрым с этими ...
Проверьте это здесь.
объяснение
источник
TI-BASIC, 4 байта с использованием однобайтовых токенов
Определяет, равна ли целая часть входных данных случайному числу в [0,1) нулю.
Ansrand<1
тоже работает.источник
MATL, 5 байтов
Три разные версии этой, все 5.
который принимает input (
i
), генерирует случайное целое число от 1 до этого числа (Yr
) и проверяет, равно ли оно 1 (1=
). С другой стороны ,сделайте 1 (
l
обходной путь, потому что1i
в данный момент есть ошибка в выполнении), возьмите input (i
), разделите, чтобы получить 1 / N (/
), сделайте случайное число от 0 до 1 (r
) и посмотрите, не случайное ли число меньше 1 / N. Или,возьмите и введите (
i
), и умножьте на случайное число от 0 до 1 (r*
) и посмотрите, будет ли результат меньше 1 (1<
).В Matlab, а не MATL, вы можете сделать эту анонимную функцию
для 12 байтов, который используется
ans(5)
, например, при выполнении.источник
JavaScript ES6, 15 байт
-5 байт благодаря Downgoat.
На основании (использования) техники этого ответа.
источник
new Date
может также работать и может сэкономить несколько байтовЮлия,
171615 байтовЭто функция, которая генерирует случайное целое число в диапазоне от 1 до
n
и проверяет, меньше ли оно значения 2. Вероятность этого составляет 1 / n, и, следовательно, вероятность возврата 1 / ntrue
.Сохранено 1 байт благодаря Томасу Ква!
источник
Microscript II , 3 байта
Считывает целое число
n
, генерирует случайное целое число между0
иn-1
(включительно), затем применяет логическое отрицание к этому значению.источник
Candy , 2 байта
H обозначает Heisen-двойной
п означает не
'N' передается с флагом -i в качестве числового ввода. Значения, оставленные в стеке, печатаются при выходе.
«Длинная» форма:
источник
-i
как один байт.lambda x: random.random()<1/x
(ungolfed) также «указано бесплатно», что аргумент является числом.Серьезно, 3 байта
0
ложный и1
правдивый Попробуйте онлайнОбъяснение:
источник
R,
3022 байтакод
Он генерирует число из равномерного распределения (от 0 до 1) и должно оцениваться как истинное 1 / n раз.
источник
Japt, 6 байт
Попробуйте онлайн!
Mr
эквивалентно JSMath.random
. Остальное довольно очевидно. Я мог бы, вероятно, добавить числовую функцию, которая генерирует случайное число с плавающей точкой между 0 и числом. Когда это произойдет, будут сохранены два байта:Альтернативная версия:
Ð
эквивалентноnew Date(
, и объект Date, когда его просят преобразовать в число, становится текущей отметкой времени в миллисекундах. Таким образом, это совершенно случайно, если только он не запускается несколько раз за мс.источник
Marbelous , 21 байт
Я
0
считал себя фальшивым и1
правдивым, хотя нет реальной причины для такого взгляда, потому что у Марбелус на самом деле нет «если». Больше Marbelousy будет выведено{0
для истинного и{>
ложного. Это будет выглядеть так:Но я не уверен, что это действительно.
источник
APL,
63 байтаЭто последовательность функций, которая принимает целое число и возвращает 1 или 0 (истина / ложь APL). Мы генерируем случайное целое число от 1 до ввода, используя
?
, а затем проверяем, равно ли входное значение этому целому числу. Это приводит к 1 / входной шанс истины.Сохранено 3 байта благодаря Томасу Ква!
источник
⊢
вместо «+», потому что+
означает конъюгат для комплексных чисел. Конечно, здесь это не имеет значения, и+
это традиционная функция идентификации (no-op), но теперь мы имеем⊢
(то же самое). Другими исключениями для скаляров являются:⌷
(материализация),⊃
(выбор),⊂
(заключение),↑
(разделение),↓
(смешивание),∪
(уникальное),∊
(включение),,
(расхождение),⍪
(таблица),⌽
(обратное),⊖
(обратное) первый) и⍉
(транспонировать). Некоторые превращают скаляр в вектор или матрицу.PlatyPar , 3 байта
#?
получает случайное число,[0,n)
гдеn
ввод.!
возвращается,true
если число до него0
, иначе он возвращаетсяfalse
.Используя более свежие функции, которые были реализованы (но, к сожалению, для меня это не зафиксировано), до того, как был задан этот вопрос, я могу довести его до 2 с помощью
~!
Попробовать онлайн !источник
Java, 43 байта
источник
a->a*Math.random()<1
короче.C, 24 байта
источник
return
безf(n)
не имеет никакого смысла синтаксически.rand()%n
- это стандартный способ получения случайного числа в диапазоне0..n-1
. Вы правы, это зависит от того,n
чтобы быть намного меньше, чем,RAND_MAX
но нет никакого верхнего предела дляn
упомянутого в вопросе. Альтернативным подходом было бы сделать отклонение и повторный бросок на все числа отn
RAND_MAX, но это было бы безнадежно неэффективно при малыхn
.> <>, 27 + 3 для -v = 30 байт
Вот неоднородное для всех решение, где I mod N - сумма 15876 случайных пиков 0 или 1:
N должно быть введено в стек с флагом -v, выходное значение равно 0 для фальси и 1 для истинного.
Гораздо умнее и единообразнее решение, которое работает вместо 1/2 ^ N:
Для входа 3 у вас есть 1/8 шансов получить 1 и 7/8 получить 0.
Пояснение:
Я добавляю столько,
x
сколько нужно, в 4-ю строку и окружаю их направлениями, так что есть только два выходаx
: либо выход фальси, либо следующийx
. Если всеx
пойдет в правильном направлении, последний направит вас к правдивому выводу.Например, для N = 5 конечное кодовое пространство выглядит следующим образом:
источник
(iterNum/2)%N
. Я не думаю, что использование меньшего числа было бы решением. Может быть, я вас не совсем понял, или у вас есть какая-нибудь идея улучшить решение?Mathematica,
1816 байтовОсновное решение. Безымянный
Function
создает случайное число в [0, 1), умножает его на свой аргумент и проверяет, все ли оно меньше 1.источник
Python, 42 байта
редактировать : Удален
time.time()
ответ из-за распространения.источник
random
стоит делать,from random import*
чтобы сэкономитьrandom.
. Не дляtime
хотя.n
эффекта может быть заметно. Я думаю, что1>time.time()%1*n
может работать.rand
C иtime.time
Python ... Одна очевидная особенность последнего заключается в том, что он возвращает текущее время , которое не ограничено, поэтомуtime.time()%n
имеет равномерное распределение (в течение достаточно продолжительных периодов времени) для любогоn
.TeaScript , 3 байта
Попробуй это здесь.
объяснение
источник
®
символ'\xae'
представляет собой один байт. :)Нечеткое окто гуакамоле, 10 байтов
Объяснение:
источник
Perl 6 ,
108 байтЭтот код создает диапазон от 0 до, но исключая входные данные
*
. Затем онpick
один случайный и!
возвращает True, когда он получает0
.Он принимает входные данные
*
и умножает их на случайное число Num, а0..^1
затем возвращает True, если он был меньше, чем1
.источник
Пролог (SWI), 24 байта
Код:
Maybe (+ P) - это функция, которая преуспевает с вероятностью P и терпит неудачу с вероятностью 1-P
Пример:
источник
PowerShell, 25 байт
Get-Random
Функция , когда данный-Ma
параметр ximumn
возвращает значение из диапазона[0,n)
. Мы используем это, вычитая 1 из наших входных данных$args[0]
, чтобы правильно индексировать нулевое значение и получить случайное значение. Ровно1/n
в это время это значение будет0
, поэтому, когда мы будем булевыми, то оно с!
ним не вернетсяTrue
. Остальные времена вернутсяFalse
.источник
J, 3 байта
Это монадическая вилка, которая принимает аргумент справа. Аналогично APL? генерирует случайное целое число; однако J-массивы начинаются с нуля. Поэтому мы сравниваем с 0 вместо ввода.
источник
Минколанг 0,14 , 7 байт
Попробуй это здесь.
объяснение
источник
PHP, 22 байта
Читает
n
из командной строки, как:Вывод
(
false
приведен к пустой строке в PHP) или1
(в случаеtrue
).источник
C #,
5645 байтСпасибо, pinkfloydx33 сейчас 45.
Старый 56 байт
Генерирует случайное положительное целое число, большее или равное 0 и меньшее, чем
n
и проверяет, меньше ли оно,1
и возвращает результат сравнения.источник
Random.Next(k)
возвращает целое числоk
такое, что0 <= k < n
. Изменив условие на<1
, оно будет правильным. Кроме того, использование лямбда-выражения может сократить ваш код.0 < k <= n
и это должно быть так, как вы сказали. Я исправлю это немедленно.var r
экономит три. Или, если c # 6,bool a(int n) => new Random().Next(n)<1;
для 41. Хотя не уверен, что инициализация новогоRandom
вызова каждого метода будет работать должным образом, насколько распределение?Нуля , 63 байта
Попробуйте онлайн!
Картинка: Код Скретчблока :
источник