Saya tidak pernah bisa membungkus kepala saya di sekitar masalah Monty Hall . Inilah premisnya:
Misalkan Anda berada di sebuah acara permainan, dan Anda diberi pilihan tiga pintu: Di belakang satu pintu adalah mobil; di belakang yang lain, kambing. Anda memilih pintu, katakan No. 1, dan tuan rumah, yang tahu apa yang ada di balik pintu, membuka pintu lain, katakan No. 3, yang memiliki seekor kambing. Dia kemudian berkata kepada Anda, "Apakah Anda ingin memilih pintu No. 2?" Apakah menguntungkan Anda untuk mengalihkan pilihan Anda?
Jalankan 10.000 simulasi. Keluarkan persentase kemenangan dari pengalihan. Sebagai contoh:
> 66.66733%
Jawaban:
JavaScript 52
Pintu adalah 1: [0,1 / 3), 2: [1 / 3,2 / 3), 3: [2/3, 1)
Anggap hadiah selalu ada di pintu 3. Jika tamu memilih pintu 1 atau 2, yaitu kisaran [0,2 / 3), dan mereka berganti, mereka telah memenangkan hadiah.
sumber
i=s=0;s+=Math.random()<2/3while i++<1e4;alert s/100
J:
1715Itu mengambil pintu acak — mari beri label 0, 1, atau 2 ini di mana 2 adalah pintu dengan mobil — dan menghitung manfaat beralih berdasarkan logika ini:
1
).1
).0
).Kemudian menghitung hasilnya sebagai jumlah dari array sebelumnya, dibagi dengan 100.
Saya cukup gemetar dengan J jadi saya yakin ini bisa diperbaiki lebih lanjut.
sumber
R
115100Jawaban pseudo-simulasi adalah 23 karakter:
tapi di sini adalah simulasi yang sebenarnya:
D
apakah pintu yang mungkinS
adalah fungsi untuk secara acak memilih satu item dari vektorC
adalah pintu dengan mobil (acak di antaraD
)P
adalah pintu yang dipilih oleh pemain (acak di antaraD
)H
adalah pintu diangkat oleh tuan rumah (acak di antaraD
minusC
danP
)F
adalah pintu terakhir yang dipilih oleh pemain (deterministik:D
minusP
danH
)C==F
.pengembalian: [1] 66.731
Edit
Saya dapat menyimpan beberapa karakter dengan tidak menugaskan ke variabel dan mengasumsikan tanpa kehilangan generalitas bahwa
C==1
:sumber
Perl,
988983757271 karakterInilah jawaban serius yang benar-benar menjalankan simulasi:
Di setiap iterasi loop, pilihan awal pemain selalu pintu # 2. Pertama pintu dengan mobil disimpan
$%
, kemudian pintu yang berbeda dipilih untuk diekspos Monty Hall. Jika pintu yang tersisa sama dengan$%
, putaran dimenangkan.(Variabel tanda baca Perl
$%
dan$=
digunakan karena mereka memotong bilangan bulat secara gratis.)sumber
Powershell -
168131125115Kode golf:
Beberapa catatan:
Script ini dimaksudkan untuk menjadi sesingkat mungkin, sambil juga simulasi skenario Monty Hall sebaik mungkin. Tidak ada asumsi di mana mobil akan berada, atau pintu mana yang akan dipilih pemain terlebih dahulu. Asumsi bahkan tidak dibuat untuk pintu tertentu tuan rumah akan memilih dalam skenario apa pun. Satu-satunya asumsi yang tersisa adalah yang sebenarnya dinyatakan dalam masalah Monty Hall:
Tidak disatukan, dengan komentar:
Saya telah menjalankan skrip ini beberapa kali dan secara konsisten menampilkan hasil yang sangat dekat dengan probabilitas dua pertiga. Beberapa sampel:
(Seperti di atas)
(Menggunakan
Get-Random
sebagai definisi alias, bukan hanyaRandom
)sumber
Ruby
484038Kode saya tidak membuat asumsi tentang pintu mana hadiah akan selalu ada di belakang atau pintu mana pemain akan selalu terbuka. Sebaliknya, saya fokus pada apa yang menyebabkan pemain kalah. Sesuai artikel Wikipedia :
Jadi untuk mensimulasikan ini (alih-alih menggunakan nilai tetap), saya memodelkannya sebagai:
Kode v1:
Kode v3 (terima kasih kepada steenslag dan Iszi!):
Beberapa nilai pengembalian sampel:
sumber
p (1..10000).count{rand(3)!=rand(3)}/1e2
menghemat beberapa karakter.1e4
untuk10000
?Mathematica 42
sumber
PowerShell, 90
Berkomentar:
sumber
1e4
alih-alih10000
.C,
10195Itu untuk simulasi yang sebenarnya. Untuk beberapa kode pembengkokkan aturan yang curang, hanya
716559:Saya tidak melakukan srand () karena aturan tidak mengatakan saya harus melakukannya. Juga, versi cheaty mencetak sekitar 30.000 angka tambahan karena menyimpan karakter. Saya mungkin kehilangan beberapa trik, tetapi saya melakukan yang terbaik yang saya bisa.
sumber
main
Anda dan Anda dapat membatalkan=0
inisialisasi.Python 2:
72 6664Contoh output: 66.49
sumber
exec"i-=randint(0,2)&1;"*i
alih-alihfor
loop.print.01*i
bukanprint i/100.
.Ikan -
4643Ini menggunakan asumsi yang sama yang dibuat Tristin:
Arah ke bawah menyala
x
awalnya Anda memilih pintu yang benar, kiri dan kanan adalah kasus-kasus bahwa Anda memilih pintu yang berbeda, dan naik bukan apa-apa, dan akan berguling lagi.Awalnya, saya inisialisasi
10000
dengan"dd"*
, tetapi"dd"
semua harus berada di jalur yang sama, dan saya membuang beberapa spasi. Dengan mengularaa*a*a*
saya dapat menghapus kolom, dan akhirnya 3 karakter. Ada sedikit ruang kosong yang tersisa yang belum bisa saya singkirkan, saya pikir ini cukup bagus!sumber
PHP 140
Tapi saya pikir ini tidak berfungsi dengan baik. Ada tip? Saya mendapatkan nilai dari 49 hingga 50.
sumber
Bahasa Game Maker, 19 (51 w / loop)
Ini menghasilkan 66,67! Ini adalah probabilitas yang benar;)
Kode mode serius, 51 karakter:
Pastikan untuk mengkompilasi dengan memperlakukan semua variabel yang tidak diinisialisasi sebagai 0.
Kode tertua, 59 karakter:
Sekali lagi, pastikan untuk mengkompilasi dengan memperlakukan semua variabel yang tidak diinisialisasi sebagai 0.
Outputnya adalah
66.23
sumber