Anda yang menyukai Numberphile akan mengenal Dr. James Grime, yang menggambarkan permainan dadu non-transitif di salurannya .
Permainan ini terdiri dari tiga dadu bermuka 6:
- Mati 1: 3,3,3,3,3,6
- Mati 2: 2,2,2,5,5,5
- Mati 3: 1,4,4,4,4,4
Dua pemain masing-masing memilih mati untuk digunakan. Mereka menggulung mereka dan die yang lebih tinggi menang, apa pun yang terjadi.
Kemungkinan, mati 1 ketukan mati 2 dengan peluang> 50%. Demikian pula, mati 2 ketukan mati 3, dan, yang menarik, mati 3 ketukan mati 1.
Tulis pengambilan program 1
, 2
atau 3
sebagai masukan. Ini menunjukkan die yang dipilih pengguna. Program kemudian memilih dadu yang akan mengalahkan pengguna dan menghasilkan hasil 21 gulungan, dan " Computer/User wins with x points
"
Aturan
- Code-golf, memilih sebagai tiebreak
- Anda harus menggunakan RNG (atau sejenisnya) untuk benar-benar mensimulasikan gulungan dadu.
- Saya tidak terlalu ketat pada format output. Tidak apa-apa selama Anda menunjukkan dadu, entah bagaimana memisahkan antara 21 gulungan (dengan cara yang berbeda dari cara Anda memisahkan dadu dalam gulungan yang sama), dan mengeluarkan kalimat itu di atas.
- Input dapat berupa stdin, argumen baris perintah, dari layar, dll.
Contoh
Memasukkan
1
Keluaran
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 6
1 3
4 3
4 3
1 3
4 3
1 3
4 3
4 3
4 3
4 3
4 6
Computer wins with 16 points
Di sini, pengguna memilih die 1 dan gulungannya ditampilkan pada kolom kanan. Program memilih die 3 dan mengalahkannya.
|Z-21×X
yang tidak mengubah hitungan charR - 228
Contoh dijalankan:
sumber
summary.factor
dengantable
, menghemat 9 karakter.Mathematica
208172166159Spaces ditambahkan untuk kejelasan
sumber
Ruby 1.8, 165
getc
mendapat nilai ascii dari input (ruby 1.8 saja), yang dengan senang hati adalah modulo 3 kongruen dengan nilai integernya.s
dimulai pada 21, jadis.times{code}
akan mengeksekusicode
21 kali dan kembali 21. Pada setiap iterasi, loop dapat menambah atau mengurangi 1 dari s tergantung pada siapa yang menang, sehingga kita dapat melihat siapa yang menang dengan melihat apakahs
telah berakhir di bawah 21. Rapi sejauh ini , tapi kemudian saya perlu ekspresi canggung[s/=2,21-s].max
untuk mengekstrak jumlah poin yang sebenarnya. Saya sudah lama ingin melakukan aritmatika dengan nilai pengembalian<=>
, jadi saya senang pula.sumber
Mathematica
234247Kode
Pemakaian
Penjelasan
n
adalah angka 1, 2, atau 3 yang sesuai dengan dadu pemain. Karena n juga menentukan (tetapi tidak sama dengan) dadu komputer, kita dapat menghasilkan semua kemungkinan gulungan dadu ketika n = 1, n = 2, n = 3. Kami juga dapat menentukan probabilitas masing-masing.Periksa data segera setelah
RandomChoice
:Jika pemain imbang 1 mati, satu-satunya hasil yang mungkin adalah 4 pasang berikut
{{3, 1}, {3, 4}, {6, 1}, {6, 4}}
Probabilitas masing-masing pasangan ini adalah
{5, 25, 1, 5}/36
, itu adalah,{5/36, 25/36, 1/36, 5/36}
RandomChoice[<data>, 21]
menghasilkan 21 gulungan dari dua dadu.sumber
C,
205191Membaca pilihan pengguna dari stdin.
sumber
for(c=51-getchar(p=0);
,printf("%ser wins
), ekspresi menyusun ulang dir
mulai dengan(
dan menghemat ruang.(c+1)%3
->-~c%3
, buatp
statis (diinisialisasi ke 0), hapus{}
setelahfor
(;
->,
di dalamnya), gunakanp<11?:
dua kali di dalamprintf
alih-alih menetapkanp,q
.s,q
dalam lingkaranprintf
, dan kenaikanp
setelahnya, sehingga menghemat tanda kurung. Juga mengubahc
tugas untuk menggunakan%3
atau%7
, memberikan urutan 0,1,2 yang berbeda.Faktor
Dengan termasuk: 388
Tanpa: 300
Ya, Factor sebenarnya bukan bahasa yang digunakan saat bermain golf, tapi menyenangkan.
sumber
Python 182
sumber
R 206
sumber