Masalah
Mulai dari n=2
dadu:
- Gulung
n
dadu, dengan masing-masing angka 1 hingga 6 kemungkinan sama pada setiap dadu. - Periksa apakah jumlah mereka sama dengan jumlah
n
dadu yang paling mungkin , yaitu3.5*n
.- Jika mereka sama, hentikan.
- Jika tidak, cetak
n
, dan ulangi dari awal dengann+2
dadu
Kode Anda tidak harus melakukan prosedur ini dengan tepat, tetapi harus memberikan output acak yang secara probabilistik setara dengan itu, berdasarkan definisi keacakan kami .
Program Anda harus menampilkan semua angka pada jalurnya sendiri; misalnya, jika programnya mencapai 8 dadu dan menggulirkan angka yang paling mungkin dengan 8 dadu, hasilnya adalah:
2
4
6
Contoh Jalankan
Pada 2 dadu, 7
adalah jumlah yang paling memungkinkan. Katakanlah angka-angka yang digulung adalah 2
dan 3
. Kemudian, Anda akan mencetak 2
.
Pada 4 dadu, 14
adalah jumlah yang paling memungkinkan. Katakanlah nomor digulung adalah 3
, 4
, 2
, dan 5
. Kemudian, jumlahnya adalah 14
, jadi program akan berakhir di sini.
Hasil akhir dalam kasus ini adalah "2"
.
Aturan
- kode-golf sehingga solusi terpendek dalam byte menang
- Celah Standar Berlaku
- The meta definisi keacakan berlaku
- Anda dapat menggunakan fungsi dan program
2, 4, 6, 8, ...
gulungan yang banyak dadu setiap kali sampai saya menekan nomor yang paling mungkin untuk iterasi itu?Jawaban:
Python 2 , 70 byte
Cobalah online!
Caranya adalah dengan menghitung penjumlahan dengan
eval
memasukkan string seperti apadengan
n
salinan ekspresi digabungkan. Therandrange(6)
output nomor acak dari[0,1,2,3,4,5]
, yang bergeser turun2.5
untuk memiliki rata-rata0
. Ketika dijumlahkan0
,while
kondisi gagal dan loop berakhir.Penggunaan alternatif
map
adalah 4 byte lebih lama:Saya telah menemukan banyak ekspresi sama panjang untuk mati bergeser ke nol, tetapi tidak ada yang lebih pendek
sumber
MATL , 13 byte
Cobalah online!
Penjelasan
sumber
Jelly ,
1914 byte-5 byte dengan bantuan dari Leaky Nun (bergerak dari hitungan hingga rekursi)
Program lengkap mencetak hasil yang dipisahkan oleh baris baru (ruang tambahan dan baris baru juga dicetak, dan kesalahan program pada akhirnya).
Cobalah online! - Setiap saat 6 dadu dilampaui TIO membunuh ini karena penggunaan memori, tetapi pada prinsipnya bekerja - itu juga membutuhkan ~ 40s untuk melakukannya.
Versi 15 byte yang lebih ramah yang tidak memakan waktu lama atau membutuhkan banyak memori tersedia di sini .
Bagaimana?
Gulung 2 dadu secara rekursif hingga jumlah wajah masing-masing berkurang 3,5 adalah nol, mencetak jumlah dadu saat berjalan, ketika nol tercapai, upaya untuk menggunakan karakter spasi menyebabkan kesalahan jenis.
sumber
n
, oke mungkin bisa diselamatkan. Saya pikir Anda maksudkan jumlahnya :)TI-BASIC, 28 byte
Penjelasan
randInt(1,6,N)
menghasilkan daftar nomor acak N dari 1 hingga 6mean(randInt(1,6,N)-3.5
mendapat rata-rata gulungan bergeser ke bawah sebesar 3,5While
berlanjut sampai ekspresi rata-rata sama dengan nol (jumlah yang paling mungkin)sumber
R , 49 byte
sample(6,n,T)
Menghasilkann
(pseudo) sampel acak dari kisaran1:6
dengan penggantian. Mengurangkan 3,5 dari setiap elemen menghasilkan hasil yangsum
0 (falsey) jika dan hanya jika itu adalah nilai yang paling umum.Cobalah online!
Melompati gulungan dadu yang aneh.
sumber
Java 8,
123149113108 byteAtau 107 byte jika kita menggunakan sebuah
Object null
sebagai parameter yang tidak terpakai sebagai gantinya.+26 byte untuk perbaikan bug, ditunjukkan dengan benar oleh @Jules di komentar.
-41 bytes berkat pemikiran hebat @ OliverGrégoire !
Penjelasan:
Coba di sini.
sumber
r
sama3.5*n
dengan program harus diakhiri secara langsung. Tapi, jika saya mengerti fungsinya dengan benar, itu akan mencetak untukn
terakhir kalinya sebelum mengakhiri.n
2. Jadi, memang ada dua bug (1-12 bukannya 2-12; dan dadu bergulir seperti 2 -> 2 -> 4 -> 6 -> ..., bukannya 2 -> 4 -> 6 -> ...). Namun itu mencetak dengan benar, karena itu tidak akan pergi keSystem.out.println(n),n+=2
jikar
memang sama dengan3.5*n
.()->{for(int n=2,s=0,e=7,i;s!=e;n+=2,e+=7){for(i=n,s=n;i-->0;)s+=Math.random()*6;if(s!=e)System.out.println(n);}}
. Juga, benar dalam hal komentar Jules dan penjelasan saya.n
adalah dadu,s
jumlah,e
diharapkan,i
adalah indeks. Akhirnya, jumlah dimulai dengann
untuk menghindari+1
,,n
kali, dans!=e
diulang karena saya tidak tahu bagaimana menghindari kasus itu.()->{for(int i=0,s=1,j;s!=i*7;){for(j=s=++i*2;j-->0;)s+=Math.random()*6;if(s!=i*7)System.out.println(i*2);}}
05AB1E ,
2220 byte-2 Bytes terima kasih kepada Emigna
Cobalah online!
Penjelasan
sumber
O
setelah.R
Anda dapat menghapus)
dans
.R,
484442 bytePeningkatan 5 byte pada jawaban Giuseppe .
Ini (ab) menggunakan fakta yang
F
merupakan variabel secara default ditugaskan untukFALSE
memaksa0
dan kemudian dapat ditingkatkan, menghemat kita perlu menginisialisasi variabel counter.sumber
sample(6)
alih-alihsample(1:6)
tetapi mencoret 44 masih 44 .... codegolf.stackexchange.com/a/82343/67312PHP , 75 byte
Cobalah online!
sumber
5^2/++$i*$d+=rand()%6
adalah kondisi yang sedikit lebih pendek untuk loop. Juga saya pikir loop saat ini salah keluar jika "dadu" pertama digulung adalah "1" (menghasilkan 0 untuk awal$d
).GolfScript , 41 byte
Cobalah online!
sumber
Mathematica, 47 byte
-5 byte dari LLlAMnYP
sumber
05AB1E , 17 byte
Cobalah online!
Penjelasan
sumber
Batch, 109 byte
Agak menjengkelkan,
random
adalah variabel lingkungan ajaib, jadi itu hanya akan diganti dengan nilai acak selama ekspansi lingkungan, yang biasanya terjadi sebelum for loop dimulai.call
membuatnya terjadi setiap kali melalui loop, tetapi kemudian Anda harus menggandakan%
tanda - tanda untuk mencegah ekspansi terjadi sebelum loop. Kesenangan dimulai karena kami ingin memodulasi hasil dengan 6, yang membutuhkan%
tanda nyata , yang sekarang harus digandakan dua kali. Hasilnya adalah enam%
s berturut-turut .sumber
JavaScript (ES2015),
7578 byteMenghasilkan serangkaian hasil yang dipisahkan oleh baris baru
Sunting: menyimpan satu byte berkat Shaggy, menambahkan 4 byte untuk memulai fungsi pada 2
Penjelasan
sumber
'\n'
.n=2
, sebaliknya Anda harus menentukan jumlah awal dadu ketika fungsi dipanggil.php - 89 Karakter
sumber
$r=0;
menggunakan pertamaecho
alih-alihprint
$n."
dapat menulis sebagai"$n
dan untuk loop alih-alih sementara memungkinkan melakukan sesuatu di loop setelah atau sebelum untuk menyimpan beberapa byteC (gcc) ,
8480797775807876 byteCobalah online!
sumber
Haskell
133132 byteKredit ke @Laikoni untuk saran di komentar di bawah.
sumber
return()
dapat dipersingkat menjadipure()
danputStrLn$show
dapat dipersingkat menjadiprint
.div k 2 then
dapatdiv k 2then
dando print k;s(k+2)
sedangprint k>>s(k+2)
.Oktaf 55 byte
Terinspirasi oleh jawaban Andrewarchi. Jika seseorang memiliki petunjuk untuk mempersingkat, mereka dipersilakan.
sumber
Pyth , 20 byte
Cobalah online!
sumber
QBIC , 40 byte
Hal ini benar-benar melakukan apa yang diminta oleh tantangan; tampaknya cara terpendek untuk mendapatkan distribusi yang tepat.
Penjelasan
sumber
Rexx (Regina) , 78 byte
Cobalah online!
sumber
JavaScript (ES6) - 69 Karakter
Penjelasan :
dan:
sumber
Calc2 0.7,
119118111 byteungolfed:
Saya bisa melakukannya tanpa Math.Int () tapi sayangnya di 0.7 fungsi Random (). Next () memiliki bug di mana mereka semua mengembalikan dua kali lipat bukan int. Itu sudah diperbaiki tetapi hanya setelah pertanyaan ini diposting. Saya tidak akan memenangkan apa pun, tapi hei, bukti konsep yang bagus.
Edit:
Sunting2:
menghapus var r dan membuat Random baru di tempat yang dibutuhkan (-4 byte)
berubah i = 0, d = 0 ke i = d = 0 (-2 byte)
bertambah setelah pemeriksaan (-1 byte)
sumber
Ruby , 52 byte
Penjelasan
Cobalah online!
sumber
s=0
di bagian depan loop dan penggunaanx.times
. Ini berarti jumlah diset ulang setiap kali dan kemudianx
dadu digulung, yang seharusnya merupakan distribusi yang benar. Saya akan menulis penjelasan tentang kode saya.Javascript, 87 karakter
Uji dengan
console.log
alih - alihalert
:sumber
lua, 102 byte
Atau versi yang lebih mudah dibaca
Versi yang lebih curang untuk 96 byte
Ini cukup banyak bekerja sama dengan yang pertama tetapi menggunakan kembali gulungan dari panggilan sebelumnya. Karena ini saya dapat menghapus for loop. Keduanya diuji dalam lua 5.2
sumber
Perl 6 , 48 byte
sumber
PHP, 51 byte
sumber