创建最短的程序检查谁已经在n赢得d井字游戏。
当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多维数据集上的点。换句话说,图块之间的Chebyshev距离为1。
- 换句话说,如果一个点
p
与一个点相邻q
,则p
s中相应坐标中的每个坐标q
相差不超过一个。此外,至少在一个坐标对上相差一个。
行数:
- 线条由矢量和图块定义。一条线是方程式命中的每个图块:
p0 + t
<
some vector with the same number of coordinates as p0>
输入:
输入将输入到STDIN。输入的第一行就会两个数字,n
并且d
在形式n,d
。
在这之后是一条由坐标组成的线,该坐标指定已完成的移动。坐标将以以下形式列出:1,1;2,2;3,3
。左上角是原点(2D为0,0)。在一般情况下,此列表类似于1,2,...,1,4;4,0,...,6,0;...
第一个数字代表左右方向,第二个上下方向,第3到第3维等。请注意,第一个坐标是X
第一转,第二个是是O
第一轮,..
输入后将跟一个换行符。
输出:
输出将输出到STDOUT。只需指出是谁赢了,还是平局,谁就赢了。如果既不是平局也不是胜利,则不要输出任何东西。
另外,请指出是否存在移动冲突,即在同一位置是否至少有两个移动。
如果在输入结束之前有赢/平局,则您的程序可以执行所需的任何操作。
测试用例(是否还有其他建议?):
输入:
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
行动才能成为赢家。(很抱歉没有在沙盒中发布这些评论,但是我什至没有时间在那看到它们,因为它在沙盒发布后不久就发布了。)