Catatan: Ini terkait dengan variasi permainan Rummikub
Latar Belakang & Aturan
Rummikub adalah game berbasis ubin. Ada empat warna: merah, oranye, biru dan hitam. Untuk setiap warna ada 13 ubin (diberi label dari 1 hingga 13), dan ada juga 2 Pelawak yang tidak tergantung warna, maka totalnya ada 54 buah. Dalam variasi Rummikub ini, setiap pemain menerima 14 ubin dan harus mendapatkan satu ubin lagi dan menjatuhkan satu lagi setiap putaran, sehingga jumlah ubin konstan. Para pemain tidak melihat ubin masing-masing. Tujuannya adalah untuk mengelompokkan ubin, sehingga semua bagian memiliki setidaknya satu grup (lihat di bawah). Ketika seorang pemain memiliki semua potongan yang dikelompokkan, mereka menjatuhkan papan ubin mereka dan mengungkapkan potongan mereka. Yang lain kemudian memeriksa apakah semua kombinasi itu valid, dan jika benar, pemain memenangkan ronde.
Bagaimana ubin bisa dikelompokkan?
Hanya ada dua jenis grup:
Grup multi-warna :
- Mereka terdiri dari 3 atau 4 ubin.
- Mereka hanya berisi ubin dengan nomor yang sama.
- Semua ubin memiliki warna yang berbeda.
- Contoh:
RED 9, BLUE 9, BLACK 9
.
Grup satu warna :
- Mereka terdiri dari setidaknya 3 ubin.
- Mereka tidak dapat berisi lebih dari 13 ubin.
- Mereka hanya berisi ubin dengan nomor yang berbeda dan berurutan, dalam urutan menaik.
- Semua ubin memiliki warna yang sama.
- Ubin berlabel
1
mungkin bukan tempat setelah ubin berlabel13
. - Contoh:
RED 5, RED 6, RED 7
.
Tunggu, apa yang dilakukan Jokers?
Pelawak dapat mengganti bagian apa pun dalam permainan. Misalnya, contoh pertama kita bisa menjadi JOKER, BLUE 9, BLACK 9
, RED 9, JOKER, BLACK 9
atau RED 9, BLUE 9, JOKER
. Hal yang sama berlaku untuk contoh kami yang lain. Namun, seseorang tidak boleh menempatkan dua Pelawak dalam kelompok yang sama, sehingga hal-hal seperti JOKER, ORANGE 8, JOKER
itu dilarang.
Tugas
Diberikan grup ubin Rummikub, tentukan apakah itu valid. Anda dijamin bahwa tidak ada ubin duplikat akan muncul, kecuali untuk 2 pelawak dan bahwa ubin yang Anda terima sebagai input valid (mis. Hal-hal seperti 60
tidak akan muncul).
Input output
Anda dapat mengambil input dan memberikan output dengan metode standar apa pun.
Beberapa format input yang valid: daftar string, daftar tupel, daftar bersarang, string, atau apa pun yang Anda temukan cocok. Warna dapat diambil sebagai Strings (misalnya:) "Blue","Red", etc.
, sebagai singkatan String (harap buat ubin Biru dan Hitam dapat dibedakan), atau sebagai bilangan bulat sesuai dengan warna. Ketika datang ke Jokers, Anda harus menyebutkan cara program Anda menerimanya sebagai input. Jika Anda memilih Strings, Anda mungkin memiliki sesuatu seperti RED 9, JOKER, ...
, jika Anda memilih tuple yang dapat Anda miliki (9,"RED"), ("JOKER")
atau sesuatu yang setara. Jika itu membantu, Anda mungkin menerima warna untuk Joker itu (yang seharusnya tidak mempengaruhi output program Anda). Sebagai contoh, Anda mungkin memiliki ("JOKER","RED")
atau ("JOKER","BLUE")
, tetapi itu seharusnya tidak mempengaruhi output dengan cara apa pun.
Mengenai output, aturan standar untuk masalah keputusan berlaku.
Contoh yang berhasil
Mari kita ambil contoh, yang diharapkan akan membuatnya lebih mudah untuk dipahami. Diberikan grup sebagai berikut, di mana setiap tupel mewakili ubin:
[(9, "RED"), (9, "ORANGE"), ("JOKER"), (9, "BLACK")]
Ini harus mengembalikan nilai kebenaran, karena inputnya valid. Dalam hal ini, pengganti Joker (9, "BLUE")
, dan mereka membentuk kelompok multi-warna.
Jika Anda akan diberikan grup berikut:
[(9, "BLUE"), (9, "ORANGE"), (9, "RED"), (9, "BLACK"), ("JOKER")]
Itu akan tidak valid, dan dengan demikian program Anda harus mengembalikan nilai falsy, karena tidak ada yang tersisa untuk diganti oleh joker, karena jumlah maksimum kartu dalam kelompok multi-warna adalah 4.
Kasus Uji Tambahan
Ini adalah untuk rangkaian uji diperpanjang yang mencakup hampir semua situasi yang mungkin:
Input -> Output [(1, "BIRU"), (2, "BIRU"), (3, "BIRU"), (4, "BIRU"), (5, "BIRU"), (6, "BIRU")] - > jujur [(6, "BLUE"), (6, "RED"), (6, "BLACK)] -> truthy [(5, "BLACK"), (6, "BLACK"), (7, "BLACK"), (8, "BLACK"), (9, "BLACK"), (10, "BLACK"), ( "JOKER"), (12, "BLACK")] -> benar [("JOKER"), (3, "BLUE"), (3, "RED")] -> truthy [(8, "BLACK"), (2, "RED"), (13, "BLUE")] -> falsy [(4, "RED"), (3, "RED"), (5, "RED")] -> falsy [(5, "BLACK"), (6, "BLACK)] -> falsy [("JOKER"), (5, "RED"), ("JOKER")] -> falsy [(4, "RED"), (5, "RED"), (6, BLUE ")] -> falsy [(4, "RED"), ("JOKER"), (5, "RED")] -> falsy [(12, "BLACK"), (13, "BLACK), (1," BLACK ")] -> falsy
Ini adalah kode-golf , jadi kode terpendek dalam byte di setiap bahasa menang!