Karena tidak ada cukup tantangan kode-golf sederhana :
Buat program atau fungsi opsional yang tidak disebutkan namanya yang, diberikan (dengan cara apa pun) bilangan bulat 1 ≤ N ≤ 10000, mengeluarkan nilai True bahasa Anda dengan probabilitas pseudo-acak 1 / N, False sebaliknya.
Harap perhatikan bahwa persyaratan untuk penamaan telah dihapus. Merasa bebas untuk mengedit jawaban dan skor yang sesuai.
Beberapa bahasa menggunakan 1 (atau -1) dan 0 untuk Benar dan Salah, itu juga baik.
Contoh:
Contoh tes input:
4 -> True
4 -> False
4 -> False
4 -> False
4 -> False
4 -> True
4 -> False
4 -> False
Yaitu diberikan 4; mengembalikan Benar dengan peluang 25% dan Salah dengan peluang 75%.
N
harus kita terima?Jawaban:
Templat MediaWiki dengan ParserFunctions , 48 byte
sumber
#time
, mungkin untuk memperbarui usia orang yang hidup, dll.Pyth, 3 byte
Cobalah online
Pembalikan sederhana dari pilihan acak dari 0 ke input
Menariknya dalam Pyth tidak mungkin untuk membuat fungsi yang melakukan ini tanpa
$
karena fungsi Pyth secara otomatis memoize.sumber
Q
mengisi, karena kalau tidak saya akan menjawab!O
;)CJam, 5 byte
Harus cepat dengan yang ini ...
Uji di sini.
Penjelasan
sumber
TI-BASIC, 4 byte menggunakan token satu byte
Menentukan apakah bagian integer dari input kali angka acak dalam [0,1) adalah nol.
Ansrand<1
juga berfungsi.sumber
MATL, 5 byte
Tiga versi berbeda dari yang ini, semuanya panjangnya 5.
yang mengambil input (
i
), menghasilkan integer acak antara 1 dan angka itu (Yr
), dan melihat apakah itu sama dengan 1 (1=
). Kalau tidak,membuat 1 (
l
, solusi karena ada bug dengan melakukan1i
saat ini), ambil input (i
), bagi untuk mendapatkan 1 / N (/
), buat angka acak antara 0 dan 1 (r
), dan lihat apakah acak jumlahnya lebih kecil dari 1 / N. Atau,ambil dan masukkan (
i
), dan kalikan dengan angka acak antara 0 dan 1 (r*
), dan lihat apakah hasilnya lebih kecil dari 1 (1<
).Di Matlab, bukan MATL, Anda dapat melakukan fungsi anonim ini
untuk 12 byte, yang digunakan dengan melakukan
ans(5)
, misalnya.sumber
JavaScript ES6, 15 byte
-5 byte berkat Downgoat.
Berdasarkan off (penggunaan) dari ini teknik jawaban ini.
sumber
new Date
juga dapat bekerja dan mungkin menghemat beberapa byteJulia,
171615 byteIni adalah fungsi yang menghasilkan bilangan bulat acak antara 1 dan
n
dan menguji apakah kurang dari 2. Akan ada peluang 1 / n dari hal ini terjadi, dan dengan demikian peluang 1 / n untuk kembalitrue
.Disimpan 1 byte berkat Thomas Kwa!
sumber
Microscript II , 3 byte
Membaca bilangan bulat
n
, menghasilkan bilangan bulat acak antara0
dann-1
(inklusif), lalu menerapkan negasi boolean ke nilai tersebut.sumber
Permen , 2 byte
H adalah singkatan dari Heisen-double
n berarti tidak
'N' dilewatkan dengan flag -i sebagai input numerik. Nilai yang tersisa di tumpukan dicetak saat keluar.
"Bentuk panjang:
sumber
-i
sebagai satu byte.lambda x: random.random()<1/x
(ungolfed) itu juga "ditentukan secara gratis" bahwa argumennya adalah angka.Serius, 3 byte
0
adalah kepalsuan dan kebenaran1
. Cobalah onlinePenjelasan:
sumber
R,
3022 bytekode
Ini menghasilkan angka dari distribusi seragam (0 ke 1) dan harus mengevaluasi ke true 1 / n kali.
sumber
Japt, 6 byte
Cobalah online!
Mr
setara dengan JSMath.random
. Sisanya cukup jelas. Saya mungkin bisa menambahkan fungsi angka yang menghasilkan float acak antara 0 dan angka. Ketika ini terjadi, dua byte akan disimpan:Versi alternatif:
Ð
setara dengannew Date(
, dan objek Tanggal, ketika diminta untuk mengkonversi ke angka, menjadi cap waktu saat ini dalam milidetik. Dengan demikian, ini sepenuhnya acak, kecuali jika dijalankan beberapa kali per ms.sumber
Marbelous , 21 byte
Saya dianggap
0
falsey dan jujur1
, meskipun tidak ada alasan nyata untuk melihat Marbelous tidak benar-benar memiliki if. Lebih banyak Marbelousy akan menjadi output{0
untuk benar dan{>
salah. Ini akan terlihat seperti ini:Tapi saya tidak yakin itu valid.
sumber
APL,
63 byteIni adalah kereta fungsi yang mengambil bilangan bulat dan mengembalikan 1 atau 0 (APL benar / salah). Kami menghasilkan integer acak dari 1 ke input menggunakan
?
, lalu memeriksa apakah input sama dengan integer itu. Yang menghasilkan peluang 1 / input benar.Disimpan 3 byte berkat Thomas Kwa!
sumber
⊢
sebagai ganti '+' karena+
berarti Conjugate untuk bilangan kompleks. Tentu saja tidak masalah di sini, dan+
merupakan fungsi identitas tradisional (tanpa op), tetapi sekarang kita memiliki⊢
(sama). No-ops lain untuk skalar adalah:⌷
(terwujud),⊃
(pilih),⊂
(melampirkan),↑
(terbagi),↓
(campuran),∪
(unik),∊
(minta),,
(ravel),⍪
(tabel),⌽
(terbalik),⊖
(terbalik) pertama), dan⍉
(transposisi). Beberapa mengubah skalar menjadi vektor atau matriks.PlatyPar , 3 byte
#?
mendapat nomor acak di[0,n)
manan
input.!
kembalitrue
jika nomor sebelum itu0
, kalau tidak kembalifalse
.Menggunakan fitur yang lebih baru yang diimplementasikan (tapi sayangnya bagi saya tidak berkomitmen) sebelum pertanyaan ini diajukan, saya bisa turun ke 2 dengan
~!
Coba online !sumber
Java, 43 byte
sumber
a->a*Math.random()<1
lebih pendek.C, 24 byte
sumber
return
tanpa bytef(n)
tidak masuk akal secara sintaksis.rand()%n
adalah cara standar untuk mendapatkan nomor acak dalam kisaran0..n-1
. Anda benar, memang mengandalkann
jauh lebih kecil dariRAND_MAX
tetapi tidak ada batas atas untukn
disebutkan dalam pertanyaan. Pendekatan alternatif adalah dengan melakukan penolakan dan memutar ulang semua nomor darin
ke RAND_MAX tetapi akan sangat tidak efisien pada skala keciln
.> <>, 27 + 3 untuk -v = 30 byte
Berikut ini adalah solusi yang tidak seragam di mana saya mod N jumlah 15876 pilihan acak 0 atau 1:
N harus menjadi input pada stack dengan -v flag, output adalah 0 untuk falsey dan 1 untuk truey.
Solusi yang jauh lebih cerdas dan seragam yang bekerja untuk 1/2 ^ N sebagai gantinya:
Untuk input 3, Anda memiliki 1/8 peluang untuk mendapatkan 1 dan 7/8 dari mendapatkan 0.
Penjelasan:
Saya menambahkan sebanyak yang
x
diperlukan pada baris ke-4 dan mengelilinginya dengan arah sehingga hanya ada dua jalan keluarx
: baik output falsey atau berikutnyax
. Jika semuax
pergi ke arah yang benar, yang terakhir akan mengarahkan ke output yang benar.Misalnya untuk N = 5, ruang kode terakhir adalah sebagai berikut:
sumber
(iterNum/2)%N
. Saya tidak berpikir menggunakan angka yang lebih rendah akan menjadi solusi juga. Apakah saya mungkin tidak begitu mengerti Anda, atau apakah Anda punya ide lebih lanjut untuk memperbaiki solusinya?Mathematica,
1816 byteSolusi dasar. Yang tidak disebutkan namanya
Function
menciptakan angka acak dalam [0, 1), mengalikannya dengan argumennya, dan memeriksa apakah masih kurang dari 1.sumber
Python, 42 byte
Sunting : Menghapus
time.time()
jawaban karena distribusi.sumber
random
, ada baiknya dilakukanfrom random import*
untuk menghematrandom.
. Tapi tidak untuktime
saat itu.n
efek yang lebih besar bisa terlihat. Saya pikir1>time.time()%1*n
bisa bekerja.rand
dalam C, dantime.time
dengan Python ... Salah satu fitur yang jelas dari yang terakhir adalah bahwa ia mengembalikan waktu saat ini , yang tidak terikat, sehinggatime.time()%n
memiliki distribusi yang seragam (selama periode waktu yang cukup lama) untuk apa sajan
.TeaScript , 3 byte
Coba di sini.
Penjelasan
sumber
®
mewakili char'\xae'
jadi hanya satu byte. :)Fuzzy Octo Guacamole, 10 byte
Penjelasan:
sumber
Perl 6 ,
108 byteKode ini menciptakan Rentang dari 0 hingga tetapi tidak termasuk input
*
. Kemudianpick
s satu secara acak dan!
mengembalikan True ketika menerima a0
.Ini mengambil input
*
dan mengalikannya dengan jumlah acak dari0..^1
lalu mengembalikan True jika itu lebih kecil dari1
.sumber
Prolog (SWI), 24 byte
Kode:
mungkin (+ P) adalah fungsi yang berhasil dengan probabilitas P dan gagal dengan probabilitas 1-P
Contoh:
sumber
PowerShell, 25 Bytes
The
Get-Random
Fungsi ketika diberi-Ma
parameter ximumn
mengembalikan nilai dari jangkauan[0,n)
. Kami memanfaatkannya dengan mengurangi 1 dari input kami$args[0]
, jadi kami benar-benar mengindeks nol, dan mendapatkan nilai acak. Tepatnya1/n
waktu, nilai ini akan jadi0
, jadi ketika kita Boolean-bukan dengan!
itu akan kembaliTrue
. Kali lain akan kembaliFalse
.sumber
J, 3 byte
Ini adalah garpu monadik yang mengambil argumen di sebelah kanan. Sama halnya dengan APL,? menghasilkan bilangan bulat acak; Namun, array J berbasis nol. Jadi kami membandingkan dengan 0 bukan dengan input.
sumber
Minkolang 0,14 , 7 byte
Coba di sini.
Penjelasan
sumber
PHP, 22 byte
Dibaca
n
dari baris perintah, seperti:Output
(
false
dilemparkan ke string kosong di PHP) atau1
(dalam kasustrue
).sumber
C #,
5645 byteTerima kasih, pinkfloydx33 sekarang sudah 45 tahun.
Lama 56 byte
Menghasilkan bilangan bulat positif acak lebih besar atau sama dengan 0 dan lebih kecil dari
n
dan memeriksa apakah lebih kecil dari1
dan mengembalikan hasil perbandingan.sumber
Random.Next(k)
mengembalikan bilangan bulatk
sedemikian rupa0 <= k < n
. Dengan mengubah kondisi menjadi<1
, itu akan benar. Selain itu, penggunaan ekspresi lambda dapat membuat kode Anda lebih pendek.0 < k <= n
dan itu harus seperti yang Anda katakan. Saya akan segera memperbaikinya.var r
simpan tiga. Atau jika c # 6,bool a(int n) => new Random().Next(n)<1;
untuk 41. Meskipun tidak yakin apakah menginisialisasiRandom
panggilan per metode baru akan berfungsi dengan baik sejauh distribusi?Gores , 63 byte
Cobalah online!
Gambar: Kode Scratchblock :
sumber