注:これはゲームRummikubのバリエーションに関連しています
背景とルール
Rummikubはタイルベースのゲームです。赤、オレンジ、青、黒の4色があります。各色には13のタイル(1から13までのラベルが付いています)があり、色に依存しない2つのジョーカーもあるため、合計で54個になります。このRummikubのバリエーションでは、各プレーヤーは14タイルを受け取り、タイルの数が一定になるように、ラウンドごとに1つのタイルを取得し、別のタイルを1つずつドロップする必要があります。プレイヤーはお互いのタイルを見ることはありません。目標は、すべてのピースが少なくとも1つのグループに属するようにタイルをグループ化することです(以下を参照)。プレーヤーがすべてのピースをグループ化すると、タイルボードをドロップして、ピースを公開します。他の人は、すべての組み合わせが有効かどうかを確認し、有効な場合は、プレイヤーがラウンドに勝利します。
タイルをどのようにグループ化できますか?
グループには2つのタイプしかありません。
マルチカラーグループ:
- 彼らは3つまたは4つのタイルで構成されています。
- 同じ番号のタイルのみが含まれています。
- すべてのタイルは異なる色です。
- 例:
RED 9, BLUE 9, BLACK 9
。
単色グループ:
- それらは少なくとも3つのタイルで構成されます。
- 13個を超えるタイルを含めることはできません。
- それらには、昇順で異なる連続番号のタイルのみが含まれます。
- すべてのタイルは同じ色です。
- でラベル付けされたタイルは、でラベル付けされたタイルの後に配置され
1
ない場合があります13
。 - 例:
RED 5, RED 6, RED 7
。
待って、ジョーカーは何をしますか?
ジョーカーはゲームのどの部分でも代用できます。たとえば、最初の例は JOKER, BLUE 9, BLACK 9
、RED 9, JOKER, BLACK 9
またはになりRED 9, BLUE 9, JOKER
ます。同じことが他の例にも当てはまります。ただし、同じグループに2人のジョーカーを配置することはできないため、このようなことJOKER, ORANGE 8, JOKER
は禁止されています。
仕事
Rummikubタイルグループを指定して、それが有効かどうかを判断します。2つのジョーカーを除いて、重複するタイルが表示されないこと、および入力として受け取ったタイルが有効であること(たとえば、60
表示されないようなもの)が保証されます。
入出力
入力を取り、標準的な方法で出力を提供できます。
いくつかの有効な入力形式:文字列のリスト、タプルのリスト、ネストされたリスト、文字列、またはその他の適切なもの。色は"Blue","Red", etc.
文字列(例:)、文字列の省略形(青と黒のタイルを区別できるようにしてください)、または色に対応する整数として取得できます。ジョーカーに関しては、プログラムが入力として受け取る方法について言及する必要があります。文字列を選択した場合、のようなものRED 9, JOKER, ...
、可能性のあるタプル(9,"RED"), ("JOKER")
または同等のものが選択された可能性があります。それが役立つ場合は、そのジョーカーの色を受け取ることがあります(プログラムの出力に影響しないはずです)。たとえば、("JOKER","RED")
または("JOKER","BLUE")
があっても、出力には何の影響もありません。
出力に関しては、意思決定問題の標準ルールが適用されます。
実施例
理解しやすくなるように、例を挙げましょう。次のようにグループが与えられた場合、各タプルはタイルを表します。
[(9、 "RED")、(9、 "ORANGE")、( "JOKER")、(9、 "BLACK")]
入力は有効であるため、これは真実の値を返すはずです。この場合、ジョーカーがに置き換わり(9, "BLUE")
、それらはマルチカラーグループを形成します。
次のグループが与えられた場合:
[(9、 "BLUE")、(9、 "ORANGE")、(9、 "RED")、(9、 "BLACK")、( "JOKER")]
マルチカラーグループのカードの最大数は4であるため、ジョーカーに代わるものは何もないので、それは無効であり、したがって、プログラムは偽の値を返す必要があります。
追加のテストケース
これらは、考えられるほとんどすべての状況をカバーする拡張テストスイート用です。
入力->出力 [(1、 "青")、(2、 "青")、(3、 "青")、(4、 "青")、(5、 "青")、(6、 "青")]- >真実 [(6、 "BLUE")、(6、 "RED")、(6、 "BLACK)]->真実 [(5、 "BLACK")、(6、 "BLACK")、(7、 "BLACK")、(8、 "BLACK")、(9、 "BLACK")、(10、 "BLACK")、( "JOKER")、(12、 "BLACK")]->真実 [( "JOKER")、(3、 "BLUE")、(3、 "RED")]->真実 [(8、 "BLACK")、(2、 "RED")、(13、 "BLUE")]->偽物 [(4、 "RED")、(3、 "RED")、(5、 "RED")]->偽物 [(5、 "BLACK")、(6、 "BLACK)]->偽物 [( "JOKER")、(5、 "RED")、( "JOKER")]->偽物 [(4、 "RED")、(5、 "RED")、(6、BLUE ")]->偽物 [(4、 "RED")、( "JOKER")、(5、 "RED")]->偽物 [(12、 "BLACK")、(13、 "BLACK)、(1、" BLACK ")]->偽物
これはcode-golfなので、すべての言語でバイト単位の最短コードが優先されます。