Hearts adalah permainan kartu pengambilan trik untuk 4 pemain. Setiap trik diambil oleh pemain yang memainkan kartu tertinggi dari suit terkemuka. Di akhir masing-masing tangan, para pemain mengeluarkan skor penalti tergantung pada kartu penalti yang mereka ambil; tugasnya adalah menentukan skor di bawah aturan Microsoft Hearts .
Memasukkan
Input adalah 4 daftar (atau string, array, dll. Terbatas) yang menunjukkan kartu penalti yang diambil oleh masing-masing dari 4 pemain. Kartu penalti adalah
2♥, 3♥, 4♥, 5♥, 6♥, 7♥, 8♥, 9♥, 10♥, J♥, Q♥, K♥, A♥, Q♠
yang akan kami wakili sebagai
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 1, 0
masing-masing.
Keluaran
Output adalah 4 poin penalti yang dikeluarkan oleh 4 pemain (daftar, string, array, dll.). Skor adalah sebagai berikut:
- Setiap hati (
♥
, diwakili oleh bilangan bulat1
hingga13
inklusif) menimbulkan 1 poin - Ratu sekop (
Q♠
, diwakili oleh0
) mengeluarkan 13 poin - Pengecualian: jika seorang pemain telah mengambil semua kartu penalti (disebut shooting the moon), maka dia mengeluarkan 0 poin, sementara semua pemain lain mengeluarkan 26 poin.
Uji kasus
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13] --> 4, 2, 0, 20
[0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], [], [], [1] --> 25, 0, 0, 1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0], [], [], [] --> 0, 26, 26, 26
Kode terpendek dalam byte menang.
sumber
_26&1b
. -2 byte.1b
... Saya sedang mencoba mencari cara singkat untuk berubah[26]
menjadi26
dan[]
menjadi0
tetapi entah bagaimana itu tidak terjadi pada saya. Terima kasih :)R,
85 7774 byteFungsi tanpa nama yang menggunakan daftar-R sebagai input. Bekerja dengan menghitung jumlah elemen
>0
dan menambahkan 13 jika ada elemen dalam setiap vektor<1
(yaitu ratu sekop) dan simpan sebagaiz
.Jika setiap elemen dalam
z
adalah>25
, kembali26-z
, lain kembaliz
.Cobalah R-biola
sumber
26-z
bekerjaC ++ 14, 158 byte
Seperti Lambda yang tidak disebutkan namanya:
Membutuhkan
vector<vector<int>>
dan mengembalikanvector<int>
Tidak Disatukan:
Beberapa testcases untuk Anda:
sumber
Python 2,
757271 byteMengambil input sebagai
[2, 8, 7, 1], [3, 4], [], [9, 5, 6, 0, 10, 11, 12, 13]
sumber
12*(0in a)
.print[[x,26-x][26in i]for x in i]
lebih pendek satu byte.PHP, 113 byte
fungsi mengambil array array, mengembalikan array nilai.
Kagumi pemetaan array lain di PHP: loop dengan item yang dirujuk. Waaay lebih pendek dari
array_map
.sumber
Haskell,
625956 bytePemakaian:
sumber
f
sebagaif n=13^0^n
.f x|all(<26)x=x|0<1=map(26-)x
dan menggunakannya sebagai pengganti fungsi lambda menghemat beberapa byte.05AB1E ,
262221 byteTrailing whitespace harus dihapus dari input sehingga ditafsirkan sebagai array. Akhirannya terinspirasi dari jawaban lain ketika menggunakan (26-x) ketika seorang pemain mengumpulkan semua kartu penalti.
Cobalah online!
Itu masih terlihat cukup golf, dengan konstanta ganda dan pernyataan bersyarat.
Versi sebelumnya, 26 byte
(Satu byte untuk setiap titik dalam nilai penalti maksimal)
Saya memutuskan untuk menyimpannya karena panjangnya paling cocok dengan tantangan ini menurut saya :).
Cobalah online!
sumber
Python 3, 101 byte
Kode lengkap:
sumber
12*(c<1)+1
lebih pendek 2 byte dari(1,13)[c==0]
.26*(s>25)
lebih pendek 3 byte dari(26,0)[s==26]
.JavaScript (ES6),
82807772706967 byteDisimpan 2 byte berkat @Neil
Kerusakan
sumber
c=>b*26^c
menghemat 2 byte.Pip , 28 byte
27 byte kode, +1 untuk
-p
bendera.Mengambil input pada baris perintah sebagai string yang mewakili daftar bersarang, seperti
"[[2 8 7 1] [3 4] [] [9 5 6 0 10 11 12 13]]"
(tanda kutip tidak diperlukan pada TIO). Cobalah online!sumber
Ruby, 59 byte
Atau, sebagai alternatif,
Jika hanya satu tangan yang memiliki kartu, kami ingin tangan kosong mendapatkan nilai 26, dan tangan dengan kartu mendapatkan nilai 0. Saya melakukan ini dengan memanggil
min
tangan - ini mengembalikannil
array kosong, dan kemudian Saya||
memasukkannya menjadi 26. Dalam kasus lain, saya menghitung jumlah kartu di tangan dan kemudian menambahkan 12 ke Queen of Spades.sumber
Scala, 93 byte
Pemakaian:
Penjelasan:
Saya bisa menggunakan
%toSet 26
bukan% contains 26
karenaSet
'sapply
metode adalahcontains
dan tidak mendapatkan-di-indeks sepertiSeq
' ssumber