Home 問題5: ●×ゲームの判定
今回は●Xゲームの勝敗決め
データの与えられ方は
data = ([
"O.O",
"XX.",
"XOX"])
で勝敗を決定する。 行列を使ってみた。
def checkio(data): mapping = {'X': '1', 'O':'-1', '.':'0'} text = [int(i.translate(str.maketrans(mapping))) for i in ''.join(data)] testmat = np.array(text).reshape(3,3) testrow = testmat.dot(np.ones(3)) testcol = np.ones(3).dot(testmat) testdiag = np.trace(testmat) testinvdiag = np.trace(np.flip(testmat, axis=0)) test = np.concatenate((testrow, testcol, [testdiag], [testinvdiag]), axis = 0) if np.sum(test==3) >= 1: return 'X' elif np.sum(test==-3)>= 1: return 'O' else: return 'D'
上記のtestで、8個のラインをそれぞれ評価する。この流れは皆かわらないが、文字列のままでやっている人がほとんどで、
return 'X' if 'XXX' in test else...
とやっている人が多かったです。
更に、zip関数を上手に使うと
rows = data cols = list(map(''.join, zip(*rows))) diag = [(r[i], r[2-i]) for (i, r) in enumerate(rows)] diag = list(map(''.join, zip(*diag))) test = rows + cols + diag
でtestまでシンプルにいけるということを学びました。この調子でcheckioをしながら、基本的な関数の使い方を少しづつ学びます。