Spaces:
Running
Running
def solve(): | |
with open("./input.txt", "r") as f: | |
grid = [line.strip() for line in f] | |
rows = len(grid) | |
cols = len(grid[0]) | |
def check_pattern(r, c, pattern): | |
for dr in [-1, 0, 1]: | |
for dc in [-1, 0, 1]: | |
if dr == 0 and dc == 0: | |
continue | |
found = True | |
for i in range(len(pattern)): | |
nr, nc = r + dr * i, c + dc * i | |
if 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == pattern[i]: | |
continue | |
else: | |
found = False | |
break | |
if found: | |
return True | |
return False | |
# Part 1 | |
count1 = 0 | |
for r in range(rows): | |
for c in range(cols): | |
if check_pattern(r, c, "XMAS") or check_pattern(r, c, "SAMX"): | |
count1 += 1 | |
print(count1) | |
# Part 2 | |
count2 = 0 | |
for r in range(rows): | |
for c in range(cols): | |
if ( | |
1 <= r < rows - 1 and 1 <= c < cols - 1 and | |
(grid[r-1][c-1] == 'M' or grid[r-1][c-1] == 'S') and | |
(grid[r-1][c+1] == 'M' or grid[r-1][c+1] == 'S') and | |
(grid[r+1][c-1] == 'M' or grid[r+1][c-1] == 'S') and | |
(grid[r+1][c+1] == 'M' or grid[r+1][c+1] == 'S') and | |
(grid[r-1][c] == 'A' or grid[r-1][c] == 'A') and | |
(grid[r][c-1] == 'A' or grid[r][c-1] == 'A') and | |
(grid[r][c+1] == 'A' or grid[r][c+1] == 'A') and | |
(grid[r+1][c] == 'A' or grid[r+1][c] == 'A') and | |
(grid[r][c] == 'S' or grid[r][c] == 'M') | |
): | |
count2 += 1 | |
print(count2) | |
solve() |