Tichu adalah permainan kartu di mana para pemain bergiliran memainkan set kartu dari setumpuk yang terdiri dari setumpuk 52 kartu standar, ditambah 4 kartu tambahan:
- yang naga , yang memiliki nilai lebih besar dari kartu lain
- yang phoenix , yang dapat bertindak sebagai wildcard
- yang anjing , yang melewati gilirannya untuk pasangan Anda
- yang Mah Jong , yang memiliki nilai 1 (dan orang memegangnya memainkan pertama)
Pemain pertama (yang dikatakan memiliki "lead") dapat memilih untuk memainkan salah satu jenis kombinasi kartu berikut:
- satu tunggal (misalnya
6
) - a pair (
JJ
) - a tiga (
555
) - sebuah rumah penuh (
QQQ33
) - triple dan sepasang - a straight (
56789
) - 5 atau lebih kartu berturut-turut - a traktor (
223344
) - setiap urutan berturut-turut pasangan
Para pemain selanjutnya hanya diperbolehkan memainkan satu set kartu dengan jenis yang sama, tetapi benar-benar lebih tinggi. Misalnya, QQ
dapat dimainkan di atas JJ
, tetapi QQKK
tidak dapat (itu adalah traktor, bukan pasangan). Rumah penuh dipesan oleh triple (mis. 77722
> 44499
), Dan lurus dan traktor harus sama panjang ( 456789
tidak bisa dimainkan di atas 23456
). As tinggi.
Ada satu pengecualian: setiap 4 kartu yang sama adalah bom , dan dapat dimainkan di atas apa pun kecuali bom yang lebih tinggi. 1
Naga dapat dimainkan dengan sendirinya di atas satu atau dengan memimpin (tetapi tidak ada tempat lain). Burung phoenix, selain sebagai wildcard, juga dapat dimainkan di atas satu pun kecuali naga. 2 Anjing hanya bisa dimainkan sendiri dengan timah dan langsung mengakhiri belokan. 3
Tantangan Anda adalah untuk menentukan apakah permainan Tichu yang diberikan valid, mengingat permainan sebelumnya.
Anda dapat menerima kedua permainan dalam urutan apa pun sebagai daftar bilangan bulat atau string - dalam kedua kasus tersebut, Anda dapat memilih pemetaan kartu apa pun untuk bilangan bulat / karakter. Jika ada permainan sebelumnya, itu akan selalu valid, dan jika tidak (yaitu pemain telah memimpin), input pertama akan menjadi array / string kosong (cocok dengan jenis input lainnya). Kartu tidak dijamin diberikan dalam urutan tertentu.
Output Anda harus dipilih dari satu set yang persis dua nilai berbeda, salah satunya menunjukkan permainan itu legal dan satu yang menunjukkan bukan.
Tidak perlu untuk menguji apakah set kartu benar-benar ada di dek (misalnya 77766
diikuti oleh 88877
tidak mungkin karena hanya ada empat 7) - kasus-kasus seperti itu tidak akan pernah diberikan.
Dalam kasus uji berikut, 234567890JQKA
mewakili 2 melalui ace, dan RPD1
mewakili masing-masing naga, phoenix, anjing, dan Mah Jong. String kosong ditampilkan di sini sebagai -
. Drama ini legal:
6 J
JJ QQ
555 KKK
44499 77722
23456 56789
223344 QQKKAA
49494 72727
A R
A P
P R
66 7P
P6 77
58304967 6P0594J7
5P304967 680594J7
57446765 788657P5
- D
- 1
- 12345
3344556677889900 JJJJ
5555 7777
Dan ini bukan:
9 3
66 55
888 444
44 888
77722 44499
44499 777
44499 777JJJ
45678 34567
34567 456789
556677 334455
5566 778899
72727 49494
A A
R A
R P
77 RP
77 6P
P7 66
680594J7 5P304967
6P0594J7 58304967
57446765 3645P536
1 D
2 D
2 1
- 1234
7777 5555
- 223355
1: sebenarnya, straight flush juga merupakan bom, tetapi karena ini adalah satu-satunya tempat dalam permainan yang sesuai dengan kartu, aku telah memilih untuk meninggalkannya demi kesederhanaan
2: nilai phoenix yang dimainkan di atas kartu dengan nilai n sebenarnya n + 0,5 (phoenix pada angka 9 adalah angka sembilan setengah); karena ini membutuhkan pengetahuan tentang sejarah tambahan untuk diputuskan, tidak ada kasus uji yang melibatkan satu pun yang dimainkan di atas satu phoenix
3: jadi input pertama tidak akan menjadi anjing
sumber
777JJJ
.1234
,223355
). Namun,RP
tidak valid: " Naga itu dapat dimainkan dengan sendirinya di atas satu atau dengan pemimpin (tetapi tidak di tempat lain). "5555 777P
seharusnya merupakan permainan yang tidak valid, tetapi kedua jawaban saat ini menandainya valid.Jawaban:
JavaScript (ES6),
274273 byteMengambil input sebagaia b
(a)(b)
, di mana dan adalah array bilangan bulat dengan:Pengembalian salah untuk valid atau benar untuk tidak valid.
Cobalah online!
Bagaimana?
o[]
Untuk setiap peringkat kartu di tangan, slot yang sesuai di
o[]
bertambah. Setelah bergabung kembali ke string, kita dapat menerapkan ekspresi reguler berikut untuk mendeteksi setiap jenis tangan:Jika tangan tidak memicu salah satu dari ekspresi reguler ini, itu tidak valid.
(20*)
Phoenix (yaitu wildcard) hanya diganti dengan setiap peringkat kartu yang mungkin, mulai dari yang tertinggi, hingga kecocokan terdeteksi.
sumber
Python 3 ,
466455403401399 byteCobalah online! Input adalah daftar tangan di mana tangan adalah daftar bilangan bulat 1 dengan pemetaan nilai berikut:
1: Meskipun dalam tes TIO tertaut diungkapkan dengan daftar string karena kemudahan yang diterjemahkan sesuai dengan pemetaan nilai sebelum menelepon
f
sumber