#P1568. Find the Winning Move

Find the Winning Move

本题没有可用的提交语言。

描述

444*4井字游戏在四行(从上到下编号0到3)和四列(从左到右编号0033)的棋盘上玩。有两个玩家,xxoo,他们交替移动,xx总是先走。第一个在同一行、同列或同对角线上得到他或她的四个棋子的玩家获胜。如果棋盘是满的,双方都没有赢,那么游戏是平局。

假设轮到xx走了,如果xx能走一步,不管在剩下的游戏中oo走了什么,xx都能赢,那么xx就可以说是被迫赢了。这并不一定意味着xx会在下一步中获胜,尽管这是一种可能性。这意味着xx有一个制胜策略,无论oo做什么,都能保证最终的胜利。

你的任务是编写一个程序,给定一个部分完成的游戏,xx下一步移动,将确定xx是否有强制获胜。你可以假设每个玩家都至少走了两步棋,游戏还没有被任何玩家获胜,棋盘也没有满。

Input

输入包含一个或多个测试用例,后面跟着以美元符号开始的行,表示文件的结束。每个测试用例以包含问号的一行开始,后面是代表电路板的四行;格式化完全如示例所示。在棋盘描述中使用的字符是句点(表示空格),小写xx和小写oo。对于每个测试用例,输出一行包含xx第一次强制获胜的位置(行,列),或者‘#####’,如果没有强制获胜。按照示例中所示的方式格式化输出。

输出

对于这个问题,第一次强制获胜是由棋盘位置决定的,而不是获胜所需的移动数量。通过检查(0,0)(0,0)(0,1)(0,1)(0,2)(0,2)(0,3)(0,3)(1,0)(1,0)(1,1)(1,1)、…,(3,2)(3,2)(3,3)(3,3),并输出您找到的第一个强制胜利。在下面的第二个测试用例中,请注意,xx可以通过在(0,3)(0,3)(2,0)(2,0)处进行操作来立即获胜,但在(0,1)(0,1)处进行操作仍然可以确保胜利(尽管不必要地延迟了它),并且位置(0,1)(0,1)首先出现。

?
....
.xo.
.ox.
....
?
o...
.ox.
.xxx
xooo
$
#####
(0,1)

来源

美国中南部1999