atcoder ABC 312 B - TaK Codeの復習
・説明:左上と右下が一致しているか愚直にif文を書く。一致していたらflad,cntを加算する。全部一致したらOK。
n,m=map(int, input().split()) s=[input() for _ in range(n)] ans=[] for i in range(n-8): for j in range(m-8): flag=0 cnt=0 if i<0 or i>=n or j<0 or j>=m: #範囲外はスルー continue #左上が一致しているか。 for k in range(4): #k=3のときは4列目なので全部の'.'じゃないとだめ if k==3 : if s[i][j+k]=='.' and s[i+1][j+k]=='.' and s[i+2][j+k]=='.' and s[i+3][j+k]=='.': flag+=1 else: if s[i][j+k]=='#' and s[i+1][j+k]=='#' and s[i+2][j+k]=='#' and s[i+3][j+k]=='.': flag+=1 #右下が一致しているか。 for l in range(4): if l==0: if s[i+5][j+5+l]=='.' and s[i+6][j+5+l]=='.' and s[i+7][j+5+l]=='.' and s[i+8][j+5+l]=='.': cnt+=1 else: if s[i+5][j+5+l]=='.' and s[i+6][j+5+l]=='#' and s[i+7][j+5+l]=='#' and s[i+8][j+5+l]=='#': cnt+=1 if flag==4 and cnt==4: ans.append((i+1,j+1)) for i,j in ans: print(i,j)