1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| from collections import deque import sys
input = sys.stdin.readline dir = [[-1,0],[1,0],[0,-1],[0,1]]
board = [list(map(str, input().strip())) for _ in range(12)]
def bfs(dx, dy, flag): q = deque() c = [[0]*6 for _ in range(12)] q.append([dx, dy]) cnt = 1 c[dx][dy] = cnt
while q: dx, dy = q.popleft()
for i in range(4): x = dx + dir[i][0] y = dy + dir[i][1]
if 0 <= x < 12 and 0 <= y < 6: if board[x][y] == board[dx][dy] and c[x][y] == 0: cnt += 1 c[x][y] = 1 q.append([x, y])
if cnt >= 4: flag += 1 for i in range(12): for j in range(6): if c[i][j] == 1: board[i][j] = "."
return flag
def check_fall(): for i in range(10, -1, -1): for j in range(6): if board[i][j] != "." and board[i+1][j] == ".": for k in range(i+1, 12): if k == 11 and board[k][j] == ".": board[k][j] = board[i][j] elif board[k][j] != ".": board[k-1][j] = board[i][j] break board[i][j] = "."
answer = 0
while True: cnt = 0
for i in range(12): for j in range(6): if board[i][j] != ".": cnt += bfs(i, j, cnt)
if cnt == 0: print(answer) break
else: answer += 1 check_fall()
|