ドミノのセットは、0からNまでの整数のすべての組み合わせが表されるように、2つの数字が付いたタイルで構成されます。以下の例では便宜上N = 6を参照していますが、N = 9とN = 12も一般的です。タイルの方向は関係ありません(通常、数字ではなくドットで印刷されます)。そのため、同じタイル[1-6]
を[6-1]
参照します。タイルはセットに1つしかありません。
ドミノでプレイするほとんどのゲームでは、プレーヤーが順番にドミノをテーブルに追加した行にドミノを追加していきます。そのため、新しいドミノの数字の1つは、テーブルの行の一端にある同じ数字の隣に配置されます。したがって、あなたは追加される場合があります[2-5]
が、既存ラインの両端に[2-3][3-3][3-5]
生じる、[5-2][2-3][3-3][3-5]
または[2-3][3-3][3-5][5-2]
。
そのようなゲームの多くは、「ダブル」、つまり同じ数の2つのドミノを、それらに接続されている他のドミノに垂直に配置する必要があります。私たちがここで気にしていないスコアリングを除いて、これは次の場合を除いて効果がありません...
これらのゲームの多くは、「ライン」が一部またはすべてのダブルで分岐することを許可します。ファイブアップは、ラインが各ダブルで3つの新しいラインに分岐できるようなゲームなので、ダブルの4辺すべてに対応するドミノが接続されている場合があります。
以下は、ファイブアップ(A | BまたはABがシングルドミノ)のゲームで設定された「ダブル6」セットからのドミノのレイアウト例です。
4
-
0
3|0 0|0 0|2
0
-
1
4|1 1|1 1|6
3
1 -
- 6
5
6
6|5 5|5 5|0 0|6 - 6|2 2|1
6
5
- 6
4 -
4
あなたのタスクは、テーブルに追加された順序でドミノのリストを取得し、この順序がファイブアップの合法的なゲームを表すかどうかを判断することです。
stdinから入力を受け取るプログラム全体、または1つ以上のパラメーターとして入力を受け取る関数を作成できます。
正規入力は、整数の2タプルのリストまたは配列になります。上記のいずれかを表す文字列や複数の文字列と同様に、リストのリスト、配列の配列、タプルのベクトルなどはすべて、入力を受け取る有効な形式です。入力には、負でない整数のペア、有効なドミノのみが含まれます。
有効なゲームと無効なゲームのそれぞれについて、出力は真または偽の値である必要があります。
コードは、言語の最大整数値の範囲内で、任意の大きなドミノ番号を受け入れる必要があります。
例:
0-6
他のシングルドミノと同様に有効です0-6 6-0
は無効です。0-6
セットにドミノが1つしかありません6-6 6-5 5-3 3-0
有効で、単純な線形配置6-6 6-5 3-0 5-3
何があり、有効ではないではない3
か、0
と前に接続するための第三のドミノのために劇中で5-3
演奏されています1-1 1-2 1-3 1-4 1-5 1-6
は無効です。4つのオープン1
エンドがすべて使用され、1-6
1-1 1-2 1-3 1-4 1-5 3-6 1-6
有効です。3-6は1-3に接続し、1-6は3-6に接続できます5-5 5-4 5-0 0-6 6-6 6-4 6-2 2-1 6-3 5-1 1-1 1-6 4-1 1-0 0-0 2-0 3-0 0-4
上記の例は有効です12-12 12-1 3-12 3-1 1-2 3-3
有効で、より大きなドミノを使用し、あいまいな配置
注:ここで必要な機能は、有効なファイブアップゲームの完全なチェックではありません。ここでは、最初にどのドミノがプレイされるかについてのルールを無視します。これは、ゲームのバリエーションとプレイヤーの数に関する詳細な情報を必要とし、入力のかなりの少数を失格にします。