最初的问题:对于给定的 3x3 井字棋棋盘,检查是否有玩家获胜。
到目前为止,我提出的最简单的解决方案是旋转矩阵并对每一行求和:
board
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
pr(board)
0 1 2
3 4 5
6 7 8
pr(zip(*board))
0 3 6
1 4 7
2 5 8
上面的 0..9 数字只是为了显示棋盘上的位置,通常它们会为玩家 1 填充 1,为玩家 2 填充 -1,为未填充位置填充 0。逐行进行,如果总和为 3 或 -3,则为获胜块。
但是,不检查对角线。有没有办法以优雅+高性能的方式从这样的矩阵中提取对角线?我的意思不是“手动”使用琐碎的索引(0、1、2),而是获取 nxn 矩阵的对角线。
PS pr 只是打印二维列表的辅助函数:
def pr(x):
for row in x:
print ' '.join(map(str, row))