paiza 問題「五目並べ Python3編」
for str in line:
の書き方すっかり忘れてたわ。実行時間0.02 sだったしいいか。
縦横斜めでOとXの数をカウントしていき、5個あればflagを立てて勝者確定。その後のカウントはスキップする。もし、OとXが両方出てきたら、すぐにカウント終了する。
1ループごとにOfとXfの数を判定しているのがすごく無駄な気がしているのだが...。for ループが終わってからOfとXfの判定をするようにしたい....。
問題はこちら。
五目並べ | レベルアップ問題集 | プログラミング学習サービス【paizaラーニング】
s=[] for i in range(5): temp = [s for s in input()] s.append(temp) #print(s) flag=0 #勝者決まったら1に res = 'D' #result。勝者なければそのままDで #横の判定 for i in range(5): Of = 0 Xf = 0 for j in range(5): if s[i][j] == 'O': Of += 1 elif s[i][j] == 'X': Xf += 1 elif Xf>0 and Of>0: break if Of == 5: res = 'O' flag = 1 break elif Xf == 5: res = 'X' flag = 1 break if flag == 0: #縦の判定 for i in range(5): Of = 0 Xf = 0 for j in range(5): if s[j][i] == 'O': Of += 1 elif s[j][i] == 'X': Xf += 1 elif Xf>0 and Of>0: break if Of == 5: res = 'O' flag = 1 break elif Xf == 5: res = 'X' flag = 1 break if flag == 0: #斜めの判定(右下がり) Of = 0 Xf = 0 for i in range(5): if s[i][i] == 'O': Of += 1 elif s[i][i] == 'X': Xf += 1 elif Xf>0 and Of>0: break if Of == 5: res = 'O' elif Xf == 5: res = 'X' if flag == 0: #斜めの判定(左上がり) Of = 0 Xf = 0 for i in range(5): if s[i][4-i] == 'O': Of += 1 elif s[i][i] == 'X': Xf += 1 elif Xf>0 and Of>0: break if Of == 5: res = 'O' elif Xf == 5: res = 'X' print(res)