黑白棋
* * * *
拉格朗日计划
* * * *
黑白棋

对每一个给定$8\times 8$的黑白棋(也叫翻转棋)局面,输出白棋下一步可以落子的位置。

每个输入的局面均为字符串,白棋和黑棋分别用O和X表示,空格用.表示。

输出同样需为字符串,可以落子的位置用!表示,不同局面的输出用一个空行隔开。

例如给定
........
........
........
...XX...
...XO...
........
........
........
应当输出
........
........
..!.!...
...XX...
..!XO...
........
........
........
本题难度:



解答

用正则表达式检查每个空位的八个相邻方向是否存在连续若干个X接一个O的字符串的即可。

代码在该帖的基础上结合字符串数组等短码技巧作了进一步优化。

最终代码只有两行。

代码长度:150字节 vs. 全站第一:116字节。

import sys,re
for a in sys.argv[1:]:print(''.join([a[p],'!'][any(re.match(r'\.X+O|',a[p::d-75]).group()for d in b'ABCJLSTU')]for p in range(71))+'\n')