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 repelem
kullanı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, datasample
bir 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 repelem
işlevin tanıtıldığı gibi kullanıldığını varsayar .repelem
iki 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, repelem
eğ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]
, 1
bir 6/1 şans olurdu 2
bir 2/6 şans olurdu ve 3
bir 6/3 şans olurdu.
Bir yan not olarak, repelem
henü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 repelem
aşağıdakiler kullanılabilir:
@(n)a(randi(nnz(a=repelem(n,n))))
Bu 16 bayt kurtaracaktı, ama olmayacaktı.