Вызов
Учитывая положительное целое число. (K)
Выведите равномерно-случайное целое число (Y)
между [0, K)
.
Если Y > 0
предположить K = Y
и повторить процесс до Y = 0
.
правила
- Ввод должен быть напечатан сначала
- Формат вывода по вашему желанию
- Ваша программа должна закончиться.
0
должен быть окончательным выводом, необязательно вместо пустой строки0
Ответы:
Pyth ,
6 54 байтаПопробуй это здесь!
Как это работает
источник
C (gcc) , 42 байта
Попробуйте онлайн!
Использует короткозамкнутые логические и.
C (gcc) , 40 байт (без начального значения печати)
Попробуйте онлайн!
Использует короткозамкнутые логические и.
источник
rand()%_
не является равномернымR ,
66 60 56 4341 байтПопробуйте онлайн!
источник
>0
иcat(n,"")
(пустая строка) также будет работать.print
здесь более эффективно, так как он возвращает свой аргумент: 56 байтk=scan();while(x<-sample(1:k-1,1))k=c(x,k);cat(rev(k),0)
n=scan();while(print(n))n=sample(n,1)-1
MATL , 6 байтов
Попробуйте онлайн!
объяснение
источник
Пепе , 25 байт
Pepe - это язык программирования, созданный пользователем Soaku .
Попробуйте онлайн!
Объяснение:
источник
Perl 6 , 18 байт
Попробуйте онлайн!
Блок анонимного кода, который возвращает список значений. Если вы не возражаете против чисел, являющихся диапазонами, вы можете сделать:
для 17 байтов. Как ни странно, другая встроенная случайная функция
roll
в этом случае имеет такое же поведение для того же количества байтов.источник
Perl 5 .10.0
-pl
, 26 байтовПопробуйте онлайн!
источник
Желе ,
43 байтаЭто монадическая ссылка (функция), которая печатает массив и возвращает 0 .
Попробуйте онлайн!
Как это работает
источник
Брахилог , 8 байт
Попробуйте онлайн!
объяснение
Рекурсия остановится, если произойдет
?ℕ₁
сбой, т. Е. При вводе0
.источник
05AB1E ,
87 байтПопробуйте онлайн!
объяснение
источник
Δ=ݨΩ0M
эквивалентно.J, 13 байт
В метро, поэтому прошу прощения за отсутствие TIO (надеюсь, нет недостатка в правильности).
Выводит список значений.
Предположительно подход APL будет короче, но это то, о чем я думал.
Как это работает
^:a:
применять повторно до сходимости, сохраняя промежуточные результаты в массиве.?
случайное число в диапазоне[0, K)
дляK
больше 0. 0, это дает случайное число в диапазоне(0,1)
. Для числа с плавающей запятой это ошибки.::]
поймать ошибку для входа?
и вместо ошибок вывести вход, вызвавший ошибку.}:
избавиться от последнего значения в массиве (так, чтобы число с плавающей запятой не выводилось).Попробуйте онлайн!
источник
?.
, но я не думаю, что использую это.JavaScript (ES6),
3837 байт-1 байт благодаря @Arnauld
Показать фрагмент кода
источник
new Date%n
здесь не работает, так как он не изменяется достаточно быстро, чтобы быть полезным для генерации нескольких случайных чиселC, 38 байт
Попробуйте онлайн
Ungolfed
источник
&&
; Кроме того, вы можете рассмотреть возможность заполнения RNG в своейmain
функции: попробуйте онлайн!Pyth , 4 байта
Попробуйте онлайн!
Это в основном реализует алгоритм:
Чтобы перевести Pyth в алгоритм, мы можем просто изучить, что означает каждый символ. Поскольку Pyth написан в префиксной нотации (то есть
* + 1 2 3
есть(1 + 2) * 3
), мы можем начать слева и заполнять аргументы по мере продвижения.W
начинается традиционный цикл while. Первый оператор после него является условием цикла, а второй оператор после него является телом цикла. Если второе утверждение пустое, оно становится неактивным . Это while работает точно так же, как Python while, поэтому оно будет оценивать ненулевые целые числа как True, а ноль - как false.Первое утверждение через некоторое время начинается с символа новой строки. Это соответствует функции Пита «печатать и возвращать с новой строкой». Это принимает один аргумент, который затем печатается, а также возвращается без изменений. Это позволяет нам печатать промежуточные шаги, а также выполнять необходимые операции.
Аргумент, передаваемый этой функции печати, начинается с
~
чего-то особенного. Если символ сразу после~
является переменной, он принимает два аргумента, в противном случае он принимает один. ПосколькуO
переменная не~
будет использовать только один аргумент.~
функции+=
во многом похожи на многие обычные языки, хотя самым близким оператором будет оператор постинкремента++
изC
. Вы можете знать, чтоx++
это будет похоже на использованиеx
в качестве текущего значения, но после этогоx
будетx+1
.~
это та же идея, но обобщенная на любой результат первого аргумента. Как он выбирает какую переменную назначить, будет рассмотрено позже.Аргумент
~
IS ,O
который очень прост. Когда его единственный аргумент является целым числом,O
возвращает значение от 0 до единицы меньше, чем это целое число, равномерно случайным образом.Теперь вы могли заметить,
O
что нет аргумента. Здесь интерпретатор Pyth любезно вводит предположение, которое здесь является переменнойQ
.Q
имеет особое значение в Pyth: всякий раз, когда он присутствует в программе, программа Pyth начинается с назначенияQ
входа программы. Так как это первая переменная, встречающаяся в~
аргументе ',Q
теперь она также является переменной, которой~
будет присвоено значение.В итоге наша «читаемая» программа может выглядеть так:
И один пример «прогона» может выглядеть так:
O
возвращает 3,~
возвращает 5,\n
возвращает и печатает 5, что верноO
возвращает 0,~
возвращает 3,\n
возвращает и печатает 3, что верноO
возвращает что-то неуместное,~
возвращает 0,\n
возвращает и печатает 0, что является ложнымисточник
APL (Dyalog Unicode) ,
129 байтФункция анонимного молчаливого префикса. Предполагается
⎕IO
( я ndex O rigin)0
, что по умолчанию во многих системах. Возвращает окончательное значение (0) в дополнение к печати во время выполнения.Попробуйте онлайн!
{
…}⍣=
Применить следующую функцию до стабильной:⎕←⍵
вывести аргумент?
вернуть равномерно распределенное случайное число в диапазоне от 0 до –1⌊
округлить вниз (потому что?0
дает (0,1) с плавающей точкой)источник
C (gcc) ,
4042 байтаКакой-то идиот ™ забыл сначала распечатать начальное значение.
Не паникуйте
источник
f(K){while(K)printf("%d\n",K),K=rand()%K;}
. Тем не менее вы получили мой +1 за равное решение!f(K){while(K)printf("%d\n",K,K=rand()%K);}
x86 + rdrand, 19 байт
Простая реализация. Принимает вход K в
ecx
и выводит в буфер вebx
.источник
Python 3 , 39 байт
Вероятно, не самый криптографически безопасный генератор случайных чисел, но для человеческого глаза это выглядит достаточно случайным ...
Попробуйте онлайн!
источник
k=0
приемлемо.hash()
пытается сохранить, но не гарантирует это свойство. Для этой задачи вы должны использоватьrandom
модуль.random.randrange()
:from random import*;f=lambda k:print(k)or f(randrange(k))
TI-Basic (TI-84 Plus CE),
1713 байтов-4 байта от Миши Лаврова
Принимает вход в
Ans
качестве50:prgmNAME
.TI-Basic - это токенизированный язык . Все токены, используемые здесь, являются одним байтом.
Объяснение:
11-байтовое решение, предложенное Мишей Лавровым, которое требует нажатия
enter
после каждой строки, следующей за первой.источник
int(Ansrand
короче. Кроме того, используяPause
вместоDisp
, вы можете сделать единственный оператор в циклеPause int(Ansrand
, который также обновляетAns
.Python 2 ,
646260 байтПопробуйте онлайн!
Сохраненный
источник
while 1:print k;k=randint(0,~-k)
должен работать (с ошибкой в конце)while 1:print k;k=randrange(k)
сохраняет два.C ++ (gcc), 98 байт
Попробуй это здесь!
использование
Это моя первая попытка игры в гольф. Любые отзывы или замечания приветствуются.
Редактировать: Удалена основная функция, как предложено, чтобы сделать ее действительной.
источник
-Dd='printf("%i,",x'
вместо символа#define
позволит вам сэкономить несколько байтов (-4) и разрешено, если вы подсчитаете количество байтов до вашего результата (поскольку это нестандартная директива препроцессора. Вы также можете пропустить импорт (в наименьший с-std=c++98
и-w
, который не учитывается для байтов), и типы переменных. Таким образом, у вас будетp(x){d);while(x>0)d=rand()%x;}
и-Dd='printf("%i,",x'
.> <>, 92 + 2 байта
+ 2B для флага -v
Попробуйте онлайн!
Единственный источник случайности> <> исходит из инструкции 'x', которая устанавливает случайным образом направление указателя инструкции. Таким образом, генерация случайного числа от 0 до n не тривиальна.
Сначала я вычисляю, сколько битов требуется для представления числа в диапазоне [0, n), затем генерирую случайные биты, чтобы сгенерировать случайное число. Это оставляет возможность того, что он сгенерирует число, немного большее n, и в этом случае мы просто отбрасываем его и пытаемся снова.
Объяснение:
источник
MATLAB (
4946 байт)Образец вывода:
источник
k=randi(k)-1
на несколько байтов меньше.Сетчатка , 21 байт
Попробуйте онлайн! Объяснение:
Повторяйте до тех пор, пока значение не перестанет изменяться (то есть 0).
Напечатайте значение перед каждым проходом через цикл.
Преобразовать в одинарный.
Создать диапазон и преобразовать в десятичную.
Выберите случайный элемент.
источник
Pyth ,
67 байтПопробуйте онлайн!
+1, чтобы напечатать начальное значение ввода.
Пока Q правдиво, установите Q как случайное целое число от 0 до Q и выведите Q.
Не самый короткий ответ Pyth, но я только учусь и пишу только из-за недавней дискуссии о том, что никто больше не использует Pyth :)
источник
=
и~
используют первую переменную выражения в качестве переменной, которая будет назначена, если она не указана. Например~hT
,T
при возврате 10. будет установлено значение 11. Единственный другой хитрый трюк заключается в том, что символ новой строки печатает свой ввод, а затем возвращает это значение без изменений, поэтому мы можем получить пустое тело цикла. Дайте мне знать, если что-то еще сбивает с толку :)Haskell ,
7471 байт-3 байта, фактически делая то, что спецификации говорят, что должно сделать.
Попробуйте онлайн!
источник
IBM / Lotus Notes Formula, 48 байтов
Формула поля, которая получает данные из другого поля
i
.Там нет TIO для формулы, поэтому вот скриншот пример вывода:
источник
Powershell,
3632 байта-4 байта спасибо AdmBorkBork
Testscript:
Выход:
источник
Get-
Это подразумевается , так что вы можете удалить его -4 байтов Попробуйте онлайн!PowerShell , 35 байт
Попробуйте онлайн!
Полная программа. Принимает ввод
$args
, сохраняет его$a
и входит вfor
цикл. Каждую итерацию мы проверяем,$a
является ли она все еще положительной (как0
в случае с PowerShell). Затем мы покидаем$a
конвейер и переходим к следующей итерации, где мы устанавливаем$a
результатGet-Random $a
, который возвращает целое число в диапазоне0..($a-1)
.(Ab) использует тот факт, что PowerShell выводит дополнительный завершающий символ новой строки вместо вывода конечного нуля (допускается правилами, как написано в настоящее время).
источник
"$args"
- хороший. Я застрял$args[0]
в этом случаеЛуа , 58 байт
Попробуйте онлайн!
Еще Луа любит здесь :)
источник
r
объявлении и переместить его вr
оператор while, тем самым вы будете использовать на 1 байт меньше для пробела (p,r=print,...p(r)while
).