Я отвечал на одну проблему здесь, и эта задача была частью проблемы. У меня есть решение 73 байта в JavaScript. Но я думаю, что это слишком много для простой вещи.
Вызов
Задано в качестве входных данных два целых числа:
N
длина ожидаемого массиваR
диапазон интервала, начинающийся с одного:,1..R
не0..R-1
Выведите при каждом запуске вашей программы / функции один другой массив длины N
со значениями 1..R
, чтобы ни одно значение не встречалось более одного раза.
Вы должны использовать R-value
в своем коде.
ограничения
Можно предположить: 2 <= N <= R
.
Я действительно хотел бы видеть решение javascript короче, чем мои 73 байта.
Но, конечно, он открыт для всех языков!
Если ваш язык не может вернуть массив, вы можете напечатать все числа;)
code-golf
random
permutations
удален
источник
источник
R=N=1
). Тогда я рекомендую разрешить использование диапазонов0..R
в качестве альтернативы, так как это более естественно для многих языков.shuffle(0..N)
new Date
выдает неоднородные значения. Кроме того, я считаю, что вы можете сыграть в гольфnew Date%r+1
;)Ответы:
Дьялог АПЛ, 1 байт
Просто встроенный. Попробуй это здесь .
источник
JavaScript (ES6),
6866 байтВызывается как
F(N)(R)()
, гдеF
это назначение функции, иN
/R
являются значениями.Вы просили короче 73 байтов в Js;)
РЕДАКТИРОВАТЬ: Ответ @ C5H8NNaO4 работает в том факте, что правила не указывают значения должны быть одинаковыми по всему
1..R
. Учитывая это, вот версия работает в 63 байта (называетсяF(R)(N)
):источник
Октава,
22 199 байтrandperm(r,n)
делает именно то, что запрашивается. Обратите внимание, что это не работает (по крайней мере, в старых версиях) в Matlab.источник
@(n,r)randperm(r,n)
randperm
с двумя входами работает в последних версиях Matlab. Есть такжеrandsample
, но это занимает больше байтов, если вы не можете избавиться от@(...)
(я думаю, что это разрешено)@randperm
=)TI-84 BASIC OS 4.0, 12 байтов
TI-84 + CSE (2013) и CE (2015), по сути, представляют собой тот же ограниченный диалект BASIC, что и TI-84 +, но есть несколько новых функций. Одним из них является третий аргумент randIntNoRep.
источник
MATL , 2 байта
Входы: первый
R
, потомN
.Попробуйте онлайн!
объяснение
Функция
Zr
принимает два входа (в данном случае неявно) и выполняет случайную выборку без замены. Первый вход,R
указывает, что население[1,2,...,R]
; и второй вход,N
указывает количество образцов, взятых у населения.источник
J,
43 байтаОдин байт сохранен благодаря Zgarb! ( Вычеркнуто четыре все еще обычные четыре: D )
называют как
N (1+?) R
, например,3 (1+?) 10
. При этом используется оператор «Roll», и он делает именно то, что описано, кроме как в0...n-1
. Если бы нам было позволено сделать это, то ответ был бы 1 байт,источник
Pyth, 6 байт
Попробуй это здесь!
Диапазон идет в первой строке, а длина - во второй.
объяснение
Неконкурентная 5-байтовая версия
Последнее добавление к Pyth добавляет неявные
Q
s в конце программы, если это необходимо. Мы можем использовать это здесь, изменив формат ввода, поэтому сначала идет длина, а затем диапазон.Попробуй это здесь!
Вот
E
диапазон, с которым мы превращаемся в список на основе 1S
, перетасовываем его.S
и берем первыеQ
элементы<
.<
ожидает целое число, которое неявно добавляется сQ
.источник
Reng v.2.1,
1401039897 байтЭто должно работать и в более ранних версиях.
Вы можете попробовать это здесь! Ввод есть
maximum length
, например10 3
.Я так горжусь этим, вы даже не знаете. Если кто-то победит меня с ответом Java, это сделает мой день. Если я опередил ответ на Java, считай, что мой день тоже сделан.
Я объясню это позже, когда выздоровею. Как правило, хотя:
Это генерирует случайные числа. Другая часть проверяет, есть ли дубликаты, и, если они есть, процесс повторяется. В противном случае результаты печатаются с пробелами, соединяющими результаты.
Вот некоторые примеры:
источник
CJam, 8 байт
Попробуй это здесь!
Это безымянный блок, который ожидает диапазон в верхней части стека и длину в нижней части и оставляет список в стеке.
объяснение
источник
Common Lisp, 90
52 только для выражения
Ungolfed
Как и другие ответы, если я не считаю use-package и lambda , оставшееся выражение
(coerce(subseq(shuffle(iota R :start 1))0 N)'vector)
для 52 байтов.источник
Руби,
2723 байтаАнонимная функция, достаточно короткая и сладкая.
-4 байта от @manatwork
источник
->n,r{[*1..r].sample n}
Пожалуйста, используйте разметку блока кода вместо встроенной разметки кода, чтобы такие сценарии, как Code Golf UserScript Enhancement Pack, могли вставлять размер кода рядом с ним.𝔼𝕊𝕄𝕚𝕟, 10 символов / 13 байтов
Try it here (Firefox only).
объяснение
источник
Баш + coreutils, 16
Я думаю, что это говорит само за себя:
Ввод
N
иR
параметры командной строки.Или, как указывает @rici, для того же результата:
Ideone.
источник
shuf -n$1 -i1-$2
(такой же длины, хотя).PowerShell v2 +, 30 байт
Принимает входные данные
$n
и$r
создает диапазон1..$r
, каналыGet-Random
с-C
количеством элементов$n
, которые будут выбирать$n
уникальные элементы из диапазона. Выходные данные остаются в конвейере в виде неявного массива.источник
Серьезно, 5 байт
Попробуйте онлайн!
Объяснение:
источник
Clojure, 38 байт
Анонимная функция, берущая N первым и R вторым.
источник
Perl 6, 32 байта
источник
Python 3,5 -
5453 байта:При этом
sample()
функция случайного модуля возвращает массив длиной «а», состоящий из случайных уникальных элементов в диапазоне1 => c
.источник
D, 29 байт (только выражение)
Предполагая, что std.random и std.range были импортированы и что n и r определены как переменные, программу можно решить одним выражением:
источник
ES6, 72
Как и в @ Mwr247 в ответ , вы можете назвать его
F(R)(N)
,F
будучи выражением функцииисточник
Mathcad, 67 "байтов"
создает вектор столбца последовательных целых чисел в диапазоне 1..R, присоединяет его к вектору столбца длины R (равномерных) случайных чисел, сортирует полученную матрицу Rx2 по столбцу случайных чисел и затем извлекает первые n чисел из рандомизированный столбец целых чисел.
источник
Python, 56 (очевидный путь)
источник
from random import*;lambda N,R:sample(range(1,R+1),k=N)
короче на байтfrom random import*
, наверное, облажался со счетом.Perl 5,
5143 байтаДовольно простая анонимная подпрограмма, которая генерирует массив от 1 до R, а затем склеивает из него N случайных элементов для возврата. Позвонить с
->(N, R)
.источник
TI-84 BASIC, 21 байт
источник
Ans
качестве входных данных согласно недавнему мета-посту.