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 байт, але цього не було.