最初の問題: 与えられた 3x3 tic tac toe ボードについて、プレイヤーの 1 人が勝ったかどうかを確認します。
これまでに思いついた最も簡単な解決策は、行列を回転させて各行を合計することです。
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 は、2 次元リストを印刷するための単なるヘルパー関数です。
def pr(x):
for row in x:
print ' '.join(map(str, row))