MATLAB, 30 байтов
@(a)datasample(repelem(n,n),1)
Это предполагает наличие MATLAB R2015a или более новой версии с установленным набором инструментов «Статистика и машинное обучение».
Смотрите объяснение ниже, как repelem
это используется. Разница между этим более коротким и приведенным ниже состоит в том, что набор инструментов S & ML включает в себя функцию, datasample
которая может использоваться для случайного выбора одного или нескольких элементов из массива (с одинаковой вероятностью), что позволяет использовать анонимную функцию, удаляя input/disp
звонки.
MATLAB, 49 байтов
n=input('');a=repelem(n,n);disp(a(randi(nnz(a))))
В этом коде предполагается, что используется MATLAB R2015a или новее, как тогда, когда repelem
была введена функция. repelem
это функция, которая принимает два параметра, первый - это массив чисел, подлежащих репликации, а второй - массив того, сколько раз должен быть реплицирован соответствующий элемент. По сути, функция выполняет декодирование длин серий, предоставляя номер и длину серий.
Предоставляя одинаковые входные данные обоим входам, repelem
мы получаем массив, который состоит из n раз больше элемента n, если это имеет смысл. Если бы вы предоставили, [1 2 3]
вы получите [1 2 2 3 3 3]
. Если бы вы предоставили, [1 2 4 2]
вы получите [1 2 2 4 4 4 4 2 2]
. Это означает, что если мы выберем элемент с равномерной вероятностью ( randi(m)
дает случайное целое число от 1 до m с равномерной вероятностью), то каждый элемент n имеет вероятность выбора в n раз выше. В первом примере [1 2 3]
, 1
будет иметь 1/6 шанс, 2
будет иметь 2/6 шанс , и 3
будет иметь 3/6 шанс.
В качестве примечания, поскольку repelem
для Octave пока нет, я не могу дать ссылку на TIO. Кроме того , поскольку Октав не может быть использован там большой штраф характер , как input()
и disp()
нужно использовать в качестве анонимной функции не представляется возможным. Если Octave поддерживается repelem
, можно использовать следующее:
@(n)a(randi(nnz(a=repelem(n,n))))
Это позволило бы сэкономить 16 байтов, но этого не произошло.