MATLAB, 30 byte
@(a)datasample(repelem(n,n),1)
Ini mengasumsikan MATLAB R2015a atau lebih baru dan dengan toolbox Statistics & Machine Learning diinstal.
Lihat penjelasan di bawah ini untuk cara repelempenggunaannya. Perbedaan antara yang lebih pendek dan yang di bawah ini adalah bahwa kotak alat S&ML mencakup fungsi datasampleyang dapat digunakan untuk mengambil satu atau lebih elemen dari array secara acak (dengan probabilitas seragam) yang memungkinkan digunakannya fungsi anonim, menghilangkaninput/disp panggilan.
MATLAB, 49 byte
n=input('');a=repelem(n,n);disp(a(randi(nnz(a))))
Kode ini mengasumsikan bahwa MATLAB R2015a atau yang lebih baru digunakan saat repelemfungsi diperkenalkan.repelemadalah fungsi yang mengambil dua parameter, yang pertama adalah array angka untuk direplikasi, dan yang kedua adalah array berapa kali elemen yang sesuai harus direplikasi. Pada dasarnya fungsi melakukan decoding run-length dengan memberikan nomor dan run-length.
Dengan memberikan input yang sama untuk kedua input repelemkita berakhir dengan sebuah array yang terdiri dari n kali lebih banyak elemen n jika itu masuk akal. Jika Anda memberi [1 2 3]Anda akan mendapatkan [1 2 2 3 3 3]. Jika Anda memberi [1 2 4 2]Anda akan mendapatkan [1 2 2 4 4 4 4 2 2]. Dengan melakukan ini berarti jika kita memilih elemen dengan probabilitas seragam (randi(m) memberikan bilangan bulat acak dari 1 ke m dengan probabilitas seragam), setiap elemen n memiliki probabilitas n kali lebih tinggi untuk dipilih. Pada contoh pertama [1 2 3], 1akan memiliki peluang 1/6, 2akan memiliki peluang 2/6 dan 3akan memiliki peluang 3/6.
Sebagai catatan tambahan, karena repelembelum tersedia untuk Octave, saya tidak dapat memberikan tautan TIO. Selain itu karena Oktaf tidak dapat digunakan ada hukuman karakter besar karena input()dan tidak disp()perlu digunakan sebagai fungsi anonim. Jika Oktaf didukung repelem, berikut ini dapat digunakan:
@(n)a(randi(nnz(a=repelem(n,n))))
Itu akan menghemat 16 byte, tetapi itu tidak terjadi.