Craps adalah permainan dadu yang cukup sederhana yang sering dimainkan di kasino. Bahkan jika Anda bukan penjudi (yang bukan saya), itu masih merupakan permainan yang cukup menarik. Inilah aturannya:
Pada awal permainan Craps ada apa yang disebut putaran keluar . Pemain menggulung dua d6 (enam sisi die) dan dua gulungan mati ditambahkan. Jika hasilnya 7 atau 11, orang tersebut secara otomatis menang (ini dikenal sebagai alami ). Jika hasilnya adalah 2, 3 atau 12 orang tersebut secara otomatis kehilangan (ini dikenal sebagai crapping out ). Kalau tidak, hasilnya ditetapkan sebagai titik untuk putaran poin.
Setelah ini, babak point dimulai. Selama putaran poin, pemain harus terus menerus menggulung 2 d6s sampai orang tersebut menggulung 7 atau poinnya dari babak sebelumnya. Jika orang tersebut memutar angka 7, mereka kalah. Jika mereka menggulung poin mereka, mereka menang.
Tantangan
Terapkan program sederhana yang mensimulasikan permainan dadu. Jika orang tersebut menggulirkan permainan alami atau omong kosong selama putaran keluar, program harus menampilkan "Alami:" atau "Menghancurkan:" diikuti oleh die-roll dan kemudian keluar. Kalau tidak, itu akan menampilkan "Point:" diikuti oleh titik. Kemudian, selama putaran poin, harus menghasilkan setiap die-roll sampai angka 7 atau poin tercapai. Jika orang tersebut menang, maka ia harus dikeluarkan "Pass"
; jika mereka kehilangan itu harus keluar "Don't Pass"
.
Implementasi Referensi
Groovy, 277 byte
def a={return Math.random()*6+1};int b=a()+a();(b<4||b==12)?{println"Crapping out: "+b}():{(b==7||b==11)?{println"Natural: "+b}():{println"Point: "+b;for(;;){int x=a()+a();println x;(x==7)?{println"Don't Pass";System.exit(0)}():{if(x==b){println"Pass";System.exit(0)}}()}}()}()
Output sampel
Natural: 7
Crapping out: 3
Point: 9
4
8
11
9
Pass
dan
Point: 5
3
7
Don't Pass
Ini kode-golf , jadi kode terpendek menang.
(PERNYATAAN: Tantangan ini tidak dimaksudkan untuk mempromosikan perjudian dengan cara apa pun. Ingat, rumah selalu menang.)
You can't make your program shorter by picking a random number between 1 and 12 for the die roll; it must be two numbers picked between 1 and 6.
- Bagaimana dengan memilih nilai acak dalam [1, 12] dari distribusi yang identik dengan menambahkan dua nilai acak seragam dalam [1, 6]?Jawaban:
Ruby 164
Cukup mudah. Fitur menarik:
Kasus crapping out dirangkum sebagai
r%12<4
dan kasus natural yang tersisa diringkas sebagair%4==3
.String awal disimpan di
c
dan gulungan lebih lanjut diambil hanya jika ini lebih baru secara alfabet dari satu huruf?P
(yang hanya terjadi untukPoint
.)sumber
Python 3, 190 byte
Ini berdasarkan jawaban Celeo ; Saya mengganti beberapa persyaratan panjang dengan angka ajaib yang mengkodekan LUT untuk setiap angka, menggunakan variabel, dan melakukan beberapa golf lain-lain. Masih ada ruang untuk bermain golf; mungkin di bawah 170.
Saya tidak mencoba menggunakan Python 2, jadi saya tidak tahu apakah akan lebih pendek.
sumber
C99,
366312293277 byteIni adalah posting pertama saya di sini, jadi saya akan menebak bahwa ini dapat ditingkatkan dengan banyak.
Versi yang Diperluas
Seperti yang Anda lihat, ada jumlah redundansi yang baik di sini yang kemungkinan besar bisa dihilangkan.
Kredit ke @Mego karena membantu membuat ini lebih kecil.
sumber
a
danb
dan juga menggunakan metode pengurangan bersama dengan operator ternary.Python 2,
226224 bytePass pertama dan ada banyak kode di sana:
Terima kasih kepada Mego untuk 2 byte!
sumber
PHP
230228218199192188 Bytes186 byte tanpa
<?
Usaha pertama di kode golf! Tidak yakin apakah menggunakan
</br>
akan diizinkan? Karena ini tidak akan berfungsi di konsol (sebagai baris baru). Beri tahu saya jika ini tidak diizinkan dan akan mengubah kode saya.EDIT (16-8-16): Setelah menjadi lebih baik di codegolf saya perhatikan beberapa kemungkinan perbaikan Ini masih berfungsi menggunakan antarmuka baris perintah. Diganti
</br>
dengan hard enter.sumber
Javascript 262
sumber
Perl 5 , 140 byte
Cobalah online!
sumber
PowerShell ,
181183179178167165 byte-10 bytes berkat mazzy
-2 bytes berkat Xcali
Cobalah online!
Versi belum dibuka:
Ada beberapa poin yang kurang melekat sekarang bahwa logika daftar-bangunan telah dibangun kembali menjadi sebuah saklar. Saya pikir itu masih pendekatan yang cukup baik. +2 byte memperbaiki bug.
sumber
-notin (7,$z)
tidak relevan dengan aturanDuring the point round, the player must continuously roll ... the previous round
. Sekarang lingkaran selesai ketika$m
sama dengan7
atau putaran pertama .Come-out
putaran dan itu adalah nomor target Anda untuk seluruhPoint
putaran. Theprevious round
mengacu padaCome-out
putaran1?
dari regex craps Anda.R, 197 byte
Tidak disatukan
sumber
Pyth , 108 byte
Cobalah online!
Pass pertama, mungkin bisa menemukan sedikit penghematan.
sumber
Pesona Rise , 151 byte
Cobalah online!
Setelah memperbaiki bug mengenai angka acak (itu re-seeding setiap kali
'RA
dipanggil, dan seed adalah waktu sistem, menghasilkan sejumlah besar nilai berulang) yang bekerja dengan benar.Penjelasan
Entri ada di baris kedua, sebagai baris pertama hingga
B͍
merupakan fungsi untuk menggulirkan dua dadu dan menjumlahkannya.Alur program, dengan beberapa pengalihan tepi dan pengeritingan melengkung terbuka untuk dibaca
Hanya ada 4 instruksi NOP (
{:}≠...?\.6?
) yang akan sangat sulit untuk dihapus karena ruang yang dibutuhkan pada baris lain (Yaitu panjang"Don't "
string).sumber