pengantar
Skat adalah permainan kartu tradisional Jerman untuk 3 pemain. Dek terdiri dari 32 kartu: Ace, King, Queen, Jack, 10, 9, 8, 7 dalam semua 4 suit (Clubs, Spades, Hearts, Diamonds).
Di setiap babak ada satu pemain bermain solo sementara dua lainnya bermain melawannya. Pada awal putaran setiap pemain dibagikan 10 kartu, 2 kartu sisanya disebut skat dan diletakkan menghadap ke bawah di tengah. Pemain solo ditentukan oleh fase penawaran. Ini adalah bagian dari permainan yang harus Anda hadapi dalam tantangan ini, detail lebih lanjut tentang ini di bawah ini.
Pemain yang memenangkan fase penawaran menjadi pemain solo. Dia mengambil skateboard dan kemudian menjatuhkan dua kartu (yang mungkin sama, tim lain tidak tahu), mengambil baju truf, dan putaran dimulai.
Satu putaran terdiri dari sepuluh trik. Pemain yang memenangkan trik memimpin yang berikutnya sampai semua kartu dimainkan. Saya tidak akan menjelaskan aturannya di sini, tetapi Anda harus tahu bahwa memiliki banyak kartu as adalah baik. Jika Anda ingin belajar tentang aturan, periksa artikel Wikipedia yang saya tautkan pada awal posting ini, tetapi tidak diperlukan untuk tantangan ini.
Tantangan
Anda ingin mengajari kedua putra Anda cara bermain skating. Aturannya tidak terlalu sulit, jadi mereka dengan cepat memahaminya. Satu-satunya hal yang membuat mereka kesulitan adalah penawaran, khususnya menghitung nilai permainan tangan mereka. Jadi, Anda memutuskan untuk menulis sebuah program kecil yang menghasilkan nilai gim maksimum yang dapat mereka tawarkan dengan bantuan yang ada.
Menghitung nilai game
Setiap tangan memiliki nilai gim tertentu. Itu ditentukan oleh jumlah Jack berurutan yang Anda miliki dan setelan yang ingin Anda pilih sebagai kartu truf. Mari kita mulai dengan faktor pertama, jack!
Faktor Jack
Jack selalu kartu truf, dan mereka mengalahkan setiap kartu truf lainnya. Urutan kekuatan antara keempat Jack adalah:
- Jack of Clubs (tertinggi)
- Jack of Spades
- Jack of Hearts
- Jack of Diamonds (terendah)
Dalam penjelasan lebih lanjut saya akan merujuk mereka dengan nomor yang saya berikan kepada mereka di sini.
Anda ingat bahwa ada beberapa faktor yang Anda dapatkan dari Jack di tangan Anda yang merupakan bagian dari nilai permainan? Bagus! Inilah cara Anda mendapatkannya:
Faktor Jack ini adalah jumlah Jack top (lihat urutan di atas) secara berurutan, ditambah 1. Jadi, jika Anda memiliki semua 4 Jack, maka adalah 4 + 1 = 5. Jika Anda hanya memiliki 2 Jack pertama, itu adalah 2 + 1 = 3.
Atau, untuk membuat hal-hal sedikit lebih rumit, Faktor Jack juga bisa menjadi jumlah Jack top dalam urutan yang Anda lewatkan , ditambah 1. Jadi, jika Anda melewatkan yang pertama, itu adalah 1 + 1 = 2. Jika Anda hilang pertama 3, itu 3 + 1 = 4. Berikut beberapa contoh, menggunakan penomoran di atas:
[1, 4] -> 1 + 1 = 2
[1, 2, 4] -> 2 + 1 = 3
[2, 3, 4] -> 1 + 1 = 2
[1, 2, 3, 4] -> 4 + 1 = 5
[] -> 4 + 1 = 5
Itu faktor pertama. Inilah cara mendapatkan yang ke-2:
The Trump Suit Factor
Yang ini jauh lebih sederhana. Faktor ke-2 ditentukan oleh setelan truf yang diambil pemain solo menggunakan pemetaan berikut:
Clubs -> 12
Spades -> 11
Hearts -> 10
Diamonds -> 9
Itu mudah, bukan?
Nilai Game
Nilai permainan adalah produk dari dua faktor. Cukup mudah menurut Anda? Salah! Sementara Faktor-Jack sudah diperbaiki, faktor-jas tidak. Setelan yang Anda pilih sebagai kartu truf tergantung pada jumlah kartu truf dan nilai kartu non-kartu truf di tangan Anda. Akan terlalu rumit untuk menjelaskan seperti apa tangan yang bagus, jadi Anda akan menggunakan algoritma berikut:
Algoritma Yang-Trump-do-I-Pick
Anda tidak harus berpartisipasi dalam penawaran. Jika Anda memutuskan bahwa tangan Anda terlalu buruk untuk bermain solo, Anda bisa lewat begitu saja. Tangan Anda harus sesuai dengan kriteria berikut untuk dapat dimainkan:
Memiliki setidaknya 6 kartu truf (kartu setelan truf yang Anda pilih + jumlah Jack). Jika ini memungkinkan untuk lebih dari satu setelan, pilih satu yang akan menghasilkan lebih banyak kartu truf. Jika masih ada dasi, pilih jas dengan peringkat tertinggi yang diberikan di atas.
Dari kartu non-truf, miliki setidaknya 1 Ace.
Jika tangan Anda tidak cocok dengan kedua kriteria ini, Anda akan lulus. Jika ya, Anda akan menampilkan nilai gim yang dihitung dan setelan truf yang dipilih.
Catatan singkat: Tentu saja ini adalah algoritma yang sangat disederhanakan. Ada terlalu banyak strategi dan pengalaman dalam menilai tangan daripada yang bisa kita bahas dalam tantangan seperti ini.
Memasukkan
Setiap kartu memiliki pengidentifikasi unik. Bagian pertama adalah setelan ( C lubs, S pades, H earts, D iamonds), bagian kedua adalah nilai yang diberikan oleh pemetaan ini:
Ace -> A
King -> K
Queen -> Q
Jack -> J
10 -> 0
9 -> 9
8 -> 8
7 -> 7
Kedua bagian digabungkan membentuk satu kartu. Nilainya datang pertama, lalu datang jas. Anda dapat mengambil kartu dalam format apa pun yang Anda inginkan.
Keluaran
Jika hand dimainkan, output nilai game dan suit truf yang dipilih (urutan tidak masalah). Jika tidak, output "lulus".
Aturan
- Seperti yang disebutkan, Anda dapat mengambil input dalam format yang paling nyaman bagi Anda. Contohnya lihat di bawah dalam kasus uji.
- Input dapat disediakan oleh argumen baris perintah, input pengguna, atau argumen fungsi.
- Output dapat diberikan sebagai nilai balik atau hanya dapat dicetak di layar.
- Kartu dalam input mungkin tidak dipesan dengan cara apa pun. Program Anda harus dapat menangani pesanan kartu acak apa pun.
- Kemenangan jumlah byte terendah!
Testcases
Masukan dalam kasus uji akan menjadi daftar 2-char Strings.
1. ["JC", "JS", "JD", "AC", "KC", "9C", "AS", "7H", "QD", "8D"] -> 36 Clubs
2. ["JD", "AS", "0S", "KS", "QS", "9S", "8S", "AD", "8C", "9C"] -> 44 Spades
3. ["JH", "JD", "0S", "KS", "9C", "8C", "QH", "KH", "AD", "9D"] -> pass
4. ["JD", "AS", "KS", "QS", "0S", "9S", "8D", "7D", "0C", "QH"] -> pass
Penjelasan:
- Dua Jack berturut-turut dengan Clubs sebagai truf. Jadi nilai game adalah 3 x 12 = 36
- Tiga Jack berturut-turut hilang dengan Spades sebagai truf. Jadi nilai gamenya adalah 4 x 11 = 44
- Hanya maksimal 4 kartu truf yang dimungkinkan, jadi Anda akan lulus.
- Enam kartu truf dengan Spades tetapi tanpa kartu as, jadi Anda akan lulus.
Jika beberapa aturan tidak jelas, silakan dan komentar. Saya telah tumbuh dengan game ini, jadi sulit bagi saya untuk menilai jika saya menggambarkan semuanya dengan cukup detail.
Dan sekarang ... Selamat Coding!
sunting: Seperti yang ditunjukkan kepada saya di komentar (terima kasih kepada isaacg), ada aturan yang menghitung truf teratas berikut setelah 4 Jack ke dalam "Jack-factor" sehingga bisa naik ke 11. Untuk menjaga tantangan ini tetap sederhana dan untuk tidak membingungkan orang, aturan yang saya usulkan pada awalnya akan tetap seperti semula. Jadi faktor maksimum tetap di 5.
sumber
Jawaban:
Python 2, contoh implementasi
Karena belum ada pengiriman, saya menuliskan contoh implementasi dengan Python. Format input sama dengan di testcases di tantangan.
Mungkin itu memotivasi kalian untuk pergi, tidak sulit :)
sumber
Java, 256 byte
Mengambil input sebagai array dari array karakter dalam format
A4
, di mana4
adalah Klub ,3
adalah Spades ,2
adalah Hati dan1
adalah Diamonds . Output adalah36 4
untuk tawaran 36 dengan truf suit Clubs ,p
untuk passing.Cobalah online di sini .
Versi tidak disatukan:
sumber
C, 235 byte
Port Java saya jawaban .
Cobalah online sini .
Mengambil input sebagai array dari karakter dalam format
A4
, di mana4
adalah Klub ,3
adalah Spades ,2
adalah Hati dan1
adalah Diamonds . Output adalah36 4
untuk tawaran 36 dengan truf suit Clubs ,p
untuk passing.Versi tidak disatukan:
sumber