Yahtzee adalah permainan yang dimainkan dengan lima dadu enam sisi dan lembar skor dengan tiga belas kotak berbeda untuk mengisi skor. Setiap kotak memiliki aturan penilaian sendiri:
- 1s, 2s, 3s, 4s, 5s, 6s semua skor poin sama dengan jumlah dadu masing-masing (yaitu, gulungan [3, 2, 3, 1, 5] skor sebagai 3s akan diberikan 6 poin: 3 untuk masing-masing 3).
- 3-of-a-kind dan 4-of-kind (seperti yang terdengar, tiga atau empat dadu digulung sama) skor poin sama dengan jumlah semua lima dadu.
- Rumah penuh (dua dadu menunjukkan satu nilai, tiga lainnya menunjukkan lain) skor 25 poin
- Kecil lurus (empat nilai berturut-turut) skor 30 poin
- Besar lurus (semua nilai berturut-turut) skor 40 poin
- Yahtzee (semua dadu menunjukkan nilai yang sama) mencetak 50 poin
Ketigabelas (kesempatan) masuk akal dalam game, tetapi tidak terlalu banyak untuk tantangan ini; selain itu permainan memiliki bonus untuk Yahtze tambahan yang tidak masuk akal di sini. Karena tantangannya adalah ...
Diberikan lima dadu sebagai input (lima bilangan bulat 1-6, input bagaimanapun nyaman, Anda dapat menganggap input selalu valid), menghasilkan skor tertinggi yang mungkin untuk 'tangan' itu. Untuk tujuan tantangan ini, hanya metode penilaian dalam daftar di atas yang valid (khususnya, peluang bukan kotak skor yang valid untuk tantangan ini). Skor tersebut harus berupa output sebagai nilai numerik desimalnya, apakah itu bilangan bulat atau representasi stringnya, apa pun. Itu harus segera dikenali sebagai angka. Leading / trailing whitespace baik-baik saja, ini tentang mendapatkan skor dan bukan presentasi.
Kode golf, jadi jawabannya dengan byte paling sedikit dalam bahasa tertentu menang. Celah standar dilarang.
Uji kasus
(Perhatikan bahwa ini semua independen, tantangannya adalah mencetak satu 'dadu' tangan):
in: 1 5 4 3 2
out: 40
in: 1 1 4 3 1
out: 10
in: 2 2 6 5 3
out: 6
in: 2 4 2 4 6
out: 8
in: 1 1 1 1 1
out: 50
in: 5 2 5 3 6
out: 10
in: 1 6 3 4 2
out: 30
in: 1 3 1 1 3
out: 25
in: 6 5 5 6 6
out: 28
in: 1 2 3 5 6
out: 6
Jawaban:
R ,
146141 byteCobalah online!
Dikalahkan oleh plannapus
Mengambil input sebagai daftar, dan mengembalikan skor.
ungolfed sedikit:
sumber
f(c(1,2,3,5,6))
gagal - itu harus menghasilkan 6 dan bukannya menghasilkan 30. Tampaknya ini karena Anda menghitung berapa banyak pasangan (post-sorting) berbeda satu, yang sebenarnya empat untuk urutan di atas, meskipun itu bukan lurus dari empat. Saya pikir saya mengalami ini ketika saya melakukan ini sebagai latihan beberapa waktu lalu, dan saya mungkin harus menambahkan itu sebagai ujian ...Python 2 ,
187184167165 byte-17 byte terima kasih kepada @mypetlion
-2 byte terima kasih kepada @chrstphrchvz
Cobalah online!
sumber
R,
136134 byteGolf turun 2 byte berkat @Giuseppe !
Bertakuk,
Beberapa kasus uji:
sumber
factor
sebentar sebelum teralihkan perhatiannya. Tapi saya pikir jika saya menggunakan pendekatan Anda denganz
(s
dalam jawaban saya), saya dapat menambang hingga 134 ...all(y<4&y-1)
dan menggunakan*
alih-alih[
, dan mengatury
inline alih-alih sebagai argumen fungsi, dan masih melewati semua kasus uji: Coba online!max
dan saya pikir itu menyelamatkan byte dari pengaturany
inline.Batch, 359 byte
Penjelasan:
Hitung jumlah dadu untuk setiap angka, plus maksimum, ditambah total semua dadu, ditambah total dadu tertinggi dari nomor yang sama.
Jika semua dadu berbeda, ini mungkin lurus panjang, tetapi itu perlu ada tidak
1
atau tidak6
.Jika tidak, atau jika paling banyak dua dadu sama, maka ini bisa menjadi lurus pendek. Setidaknya harus ada a
3
dan a4
dan juga kombinasi dari empat angka lainnya.Jika ada tiga dadu yang sama, periksa rumah penuh, karena
3^2==1
. Namun, beberapa rumah penuh, seperti 6s dan 5, skor lebih tinggi sebagai 3-of-a-kind.Jika tidak, atau jika ada empat yang sama, maka nilai totalnya.
Dan jika ada lima yang sama, maka Yahtzee!
Keluarkan skor terbaik.
sumber
Jelly , 58 byte
Cobalah online!
sumber
25.0
sementara tidak ada kasus lain yang tertinggal.0
?2.5 × 10 = 25.0
(float arithmetic), sedangkan yang lain seperti30
disimpulkan sebagai3 × 10 = 30
(aritmatika integer).× 10
2 byte,2.5
sama dengan 2 byte25
, dan3,5,4
menyimpan 3 byte lebih30,50,40
, sehingga 3 + 0 - 2 = 1 byte disimpan.Perl 6 , 159 byte
Cobalah online!
Karena input dapat diterima "namun nyaman," fungsi saya menganggapnya sebagai turunan dari
Bag
kelas, yang merupakan wadah dengan banyak. ABag
juga merupakan wadah asosiatif;$bag{$key}
mengembalikan berapa kali$key
terjadi dalam tas.Sebagian besar fungsi hanyalah daftar fungsi yang mengevaluasi setiap tangan Yahtzee yang mungkin, mengembalikan skor untuk tangan itu atau nol jika kondisi untuk tangan tersebut tidak terpenuhi.
|(1..6).map({ *{$_} * $_ })
adalah daftar enam fungsi yang mengevaluasi tangan berdasarkan angka berulang 1-6. Yang terkemuka|
meratakan daftar ini ke daftar di sekitarnya.{.kxxv.sum * ?.values.grep(* > 2) }
mengevaluasi tangan 3 dan 4 dari jenisnya..kxxv
padaBag
mengembalikan kunci diulang dengan multiplisitas masing-masing, memulihkan daftar asli gulungan mati, dan.sum
tentu saja menjumlahkan dadu. Jumlah itu dikalikan dengan nilai boolean (?
) yang benar jika tas.values
(yaitu, multiplisitas) mengandung nilai yang lebih besar dari 2.{ 25 * (6 == [*] .values) }
mengevaluasi tangan rumah penuh. 25 dikalikan dengan nilai boolean yang benar jika produk dari multiplisitas adalah 6, yang untuk lima dadu hanya dapat terjadi jika satu adalah 3 dan yang lainnya adalah 2.30 * ?*{ 3 & 4 & (1 & 2 | 2 & 5 | 5 & 6) }
mengevaluasi tangan lurus kecil. Itu sebuahWhateverCode
fungsi; bintang kedua*
adalahBag
. Ekspresi antara kawat gigi adalah persimpangan nilai 3 dan 4, dan baik 1 dan 2, atau 2 dan 5, atau 5 dan 6. Mencari persimpangan ini dalamBag
hasil di persimpangan dari multiplisitas yang sesuai. Jika mulitplicities 3 dan 4, dan setidaknya satu dari 1 dan 2, atau 2 dan 5, atau 5 dan 6, bukan nol, persimpangan benar ketika dipaksa ke boolean (dengan?
), dan boolean ini dikalikan dengan 30 untuk mendapatkan skor.40 * ?*{ 2 & 3 & 4 & 5 & (1 | 6) }
sama mengevaluasi tangan lurus besar. Ini lebih sederhana karena dadu harus memasukkan masing-masing angka 2-5, dan 1 atau 6.50 * (*.keys == 1)
mengevaluasi tangan Yahtzee. Ini hanya 50 kali nilai boolean yang benar jika jumlah dadu yang berbeda adalah satu.sumber
Pip ,
6563 byteMengambil dadu sebagai lima argumen baris perintah. Cobalah online!
Penjelasan + tidak dikelompokkan
(Ini adalah versi aslinya.)
sumber
Ruby , 184 byte
Program lengkap. Untuk membuatnya lebih mudah untuk menguji input, tambahkan
$/=' '
di atas untuk membaca dalam format "digit dipisahkan oleh spasi". (191 karakter)Saya menetapkan penghalang pembatas 200 byte dan saya berhasil menghancurkannya dengan selusin byte tersisa, dengan mudah!
Cobalah online!
Penjelasan
Bukan yang sangat bagus. Semoga Anda memiliki pengetahuan Ruby ~
sumber