n d tic tac toeゲームで誰が勝ったかを確認する最短のプログラムを作成します。
n
(幅)とd
(次元数)が次の範囲にある場合、プログラムは動作するはずです。
n∈[3,6]∩ℕ ie a number from this list: 3,4,5,6
d∈[2,5]∩ℕ ie a number from this list: 2,3,4,5
n = 3; d = 2
(3 2すなわち3 x 3):
[][][]
[][][]
[][][]
n = 3; d = 3
(3 3すなわち3 x 3 x 3):
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
[][][]
n = 6; d = 2
(6 2すなわち6 x 6):
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
[][][][][][]
等々。
勝利(十分な多次元三目並べをプレイした場合、これは同じです。)
勝つためには、一人のプレイヤーがラインに沿ってすべての隣接する正方形を持っている必要があります。つまり、そのプレイヤーはn
勝者になるためにライン上で動きをする必要があります。
隣接:
- 各タイルはポイントです。たとえば、(0,0,0,0,0)は
d=5
- 隣接するタイルは、同じユニットdキューブ上の両方のポイントであるようなタイルです。つまり、タイル間のチェビシェフ距離は1です。
- 言い換えれば、ポイント
p
がポイントに隣接している場合、対応する座標内のq
すべての座標は、1つだけ異なる。さらに、少なくとも1つの座標ペアは1つだけ異なります。p
q
行:
- 線はベクトルとタイルで定義されます。線は、方程式によってヒットした各タイルです。
p0 + t
<
some vector with the same number of coordinates as p0>
入力:
入力はSTDINになります。入力の最初の行は、形式の2つの数字にn
なります。d
n,d
この後、行われた移動を指定する座標で構成される線になります。座標は次の形式でリストされます1,1;2,2;3,3
。左上隅が原点です(2Dの場合は0,0)。一般的な場合、このリストは1,2,...,1,4;4,0,...,6,0;...
、最初の数字が左右、2番目の上下、3番目から3番目の次元などを表す場合のようになります。最初の座標はX
最初のターン、2番目はあるO
sの最初のターン、...
入力の後に改行が続きます。
出力:
出力はSTDOUTになります。誰かが勝った場合、または同点の場合、誰が勝ったかを単に示してください。同点でも勝利でもない場合は、何も出力しません。
さらに、移動の衝突があるかどうか、つまり、同じ場所に少なくとも2つの移動があるかどうかを示します。
入力が終了する前に勝ち/引き分けがあった場合、プログラムは何でもできます。
テストケース(他に提案したい人はいますか?):
入力:
4,3
0,0,0;1,1,1;1,0,1;2,0,2;0,0,1;2,0,0;2,0,1;3,0,2;3,0,1
出力例:
X wins
別の可能な出力(説明が必要):
1
n
、勝者になるにはライン上の動きが必要だと定義する必要があります。(これらの発言をサンドボックスに投稿しないで申し訳ありませんが、サンドボックス後すぐに投稿されたので、私はそれを見る時間すらありませんでした。)