atcoder ABC319 C - False Hopeの勉強
・参考
ABC319をPythonで解いてみたよ。(A~E問題) - Qiita
・説明
基本的には参考記事を参考にして、問題文の通りに実装した。
工夫としては
f=[] for _ in range(3): a,b,c=map(int,input().split()) f.append(a) f.append(b) f.append(c)
と入力を受け取ることで、そのまま見ていく順列の位置posに対して、f[pos]で値を取ってこれるようにした。
from itertools import permutations import math f=[] for _ in range(3): a,b,c=map(int,input().split()) f.append(a) f.append(b) f.append(c) tmp=[[0,1,2],[0,3,6],[3,4,5],[6,7,8],[1,4,7],[2,5,8],[0,4,8],[2,4,6]] #当てはまる縦横斜め.8こある. P=permutations([i for i in range(9)]) cnt=0 #for perm in permutations(range(9)): #for perm in P:と同じ。 for perm in P: flag=1 for t in tmp: T=[] for pos in t: #tは[0,1,2]とかでposは0,1,2とか. T.append((perm[pos], f[pos])) #perm[pos]が何番目にpos地点を見たか表す T.sort() #見た順にする. if T[0][1]==T[1][1] and T[1][1]!=T[2][1]: #がっかりするとき. flag=0 break if flag: #がっかりしなかったときをカウントする. cnt+=1 print(cnt/math.factorial(9))