Разработайте генератор случайных чисел, в котором i-е число имеет i% -ную вероятность появления для всех 0 <i <14. 0 должно иметь точно 9% -ную вероятность появления. Семя для генератора должно быть системным временем. Вы не можете использовать предопределенную функцию для генерации случайных чисел.
В основном 1 имеет вероятность 1%, 2 имеет вероятность 2% и т. Д. До 13 с вероятностью 13%. Это код-гольф, поэтому выигрывает самый короткий код.
code-golf
math
random
probability-theory
ghosts_in_the_code
источник
источник
<
неравенства и>
из блока цитаты формировали HTML-тег.Ответы:
CJam, 14 байтов
Проверьте это здесь.
объяснение
источник
mR
?Python 2, 54
Выражение
f(t) = ((8*t+1)**.5+1)//2
преобразует равномерное распределение в треугольное целочисленное распределение путем сопоставления интерваловМы конвертируем миллисекундные цифры времени в равномерное число с 0 по 100, выполняя
time.time()*1e4%100
. На самом деле, мы делаем,%800
чтобы заменить умножение на 8 в шаге преобразования. В конце, 14-е преобразовываются в 0, выполняя%14
.источник
Pyth - 14 байт
Создает массив с указанным распределением, затем выбирает случайный.
Попробуйте это онлайн здесь .
источник
Dyalog APL , 20 байтов
⍳13
целые числа от 1 до 13(/⍨
…)
реплицируются самостоятельно, например,/⍨3
есть3 3 3
и/⍨2 3
есть2 2 3 3 3
n
↓
… отбрасывать n элементов (оставляет пустой список, если n > длина списка)⎕TS
системная метка времени, например, 2015 11 1 13 28 56 834⊃⌽
последний элемент, т. е. текущая миллисекунда 0–999⌊.1×
умножить с 0,1 и округлением⊃
первого элемента, дает 0, если данные пустыисточник
Обработка 3, 65
5574байтаПолучить случайное число от 0 до 99 (включительно). Если число 0-8, выведите 0, если это 9, напечатайте 1, если 10-11 напечатайте 2, если 12-14 напечатайте 3 и т. Д.
Никто не заметил этого, но проблема со старым кодом заключается в том, что millis () возвращает количество времени, в течение которого приложение работало, что даст очень похожие цифры при последующих запусках программы. По крайней мере, теперь у нас есть нано точность!
источник
PHP, 50 байт
microtime
возвращает время в виде строки типа «0.04993000 1446409253», когда я умножаю это на 100, PHP переводит строку в 0.04993000, результат 4.993000. Так$t
инициализируется со «случайным» числом в[0,100)
$t
до тех пор, пока он не достигнет 0источник
;echo
вместо того?><?=
же количества байтов. Но красиво сделано!Python3, 86 байт
прямо вперед:
источник
J - 28 символов
Этот был глупым.
6!:0''
текущееY M D h m s
время в виде списка из 6 элементов, где миллисекунды представлены в виде долей в секундах - чтобы получить их, у нас нет другого выбора, кроме как умножить секунды ({:
) на1e3
. Между тем,#~i.14
это список от нуля 0, один 1, два 2 и так далее до тринадцати 13, и мы дополняем это до 100 пунктов100{.
.У J нет циклического индексирования, поэтому может быть заманчиво взять миллисекунды по модулю 100, прежде чем индексировать большой список. Однако мы можем сохранить два символа, используя
$
вместо этого циклическое расширение списка из 100 элементов на сколько миллисекунд мы получим (в диапазоне от 0 до 60999 ) и затем возьмем последнюю запись.Не то, чтобы список 60000 элементов занимал много памяти или что-то в этом роде, это похоже на избыточное убийство: P
источник
JavaScript (ES6) 116
Это адаптация простого засеянного ГСЧ, который я использовал вместо стандартного ГСЧ из javascript, который не может быть засеян (и поэтому не повторяется)
источник
TI-BASIC, 18 байтов
100fPart(sub(getTime
получает случайный остаток от 0 до 99. (n-1) -ное треугольное число равно(N^2+N)/2
, поэтому обратное равно√(2y+1)-.5
. Пол это после корректировки вниз на 9, и у нас есть результатЕдинственная проблема состоит в том, что для вычетов менее 8 мы получаем мнимый квадратный корень. Таким образом, мы принимаем реальную часть, чтобы программа вывела 0.
источник
Perl 5, 51 байт
50 байтов + 1
-E
вместо-e
:источник