MATLAB, 30 bayt
@(a)datasample(repelem(n,n),1)
Bu, MATLAB R2015a veya daha yenisini ve İstatistikler ve Makine Öğrenimi araç kutusunun yüklü olduğunu varsayar.
Nasıl repelemkullanıldığını görmek için aşağıdaki açıklamaya bakın . Bu daha kısa olanla aşağıdaki olan arasındaki fark, S&ML araç kutusunun, datasamplebir diziden bir veya daha fazla öğeyi rasgele (üniform olasılıkla) almak için kullanılabilen ve anonim bir işlevin kullanılmasına izin veren işlevi içermesidir.input/disp çağırır.
MATLAB, 49 bayt
n=input('');a=repelem(n,n);disp(a(randi(nnz(a))))
Bu kod, MATLAB R2015a veya daha yenisinin repelemişlevin tanıtıldığı gibi kullanıldığını varsayar .repelemiki parametre alan bir işlevdir, birincisi çoğaltılacak sayı dizisidir ve ikincisi karşılık gelen öğenin kaç kez çoğaltılması gerektiğidir. Temel olarak işlev, sayı ve çalışma uzunluğu sağlayarak çalışma uzunluğu kod çözme işlemini gerçekleştirir.
Aynı girdiyi her iki girişe de sağlayarak, repelemeğer mantıklıysa, n öğesinden n kat daha fazla bir dizi ile sonuçlanır. Eğer [1 2 3]sağladıysanız alırsınız [1 2 2 3 3 3]. Eğer [1 2 4 2]sağladıysanız alırsınız [1 2 2 4 4 4 4 2 2]. Bunu yapmak, tekdüze olasılıklı bir eleman seçersek (tekdüze olasılıkla randi(m)1'den m'ye rastgele bir tamsayı verir), her elemanın n'nin n kat daha yüksek bir seçilme olasılığına sahip olduğu anlamına gelir. İlk örnekte [1 2 3], 1bir 6/1 şans olurdu 2bir 2/6 şans olurdu ve 3bir 6/3 şans olurdu.
Bir yan not olarak, repelemhenüz Octave için mevcut olmadığından, bir TIO bağlantısı veremiyorum. Ek olarak Octave kullanılamadığından, anonim bir işlev olarak kullanılması gereken büyük bir karakter cezası vardır input()ve disp()bu mümkün değildir. Octave destekleniyorsa repelemaşağıdakiler kullanılabilir:
@(n)a(randi(nnz(a=repelem(n,n))))
Bu 16 bayt kurtaracaktı, ama olmayacaktı.