Spaces:
Running
Running
with open("input.txt") as f: | |
raw_data = f.readlines() | |
data = [] | |
for line in raw_data: | |
data.append(list(line.strip("\n"))) | |
M = len(data) | |
N = len(data[0]) | |
targets = ["XMAS", "SAMX"] | |
## Part 1 | |
total = 0 | |
for i in range(M): | |
for j in range(N): | |
if j < N - 3: | |
# Check horizontally | |
line = data[i] | |
if "".join(line[j:j+4]) in targets: | |
total += 1 | |
if i < M - 3: | |
# Check vertically | |
to_check = [data[i+a][j] for a in range(4)] | |
if "".join(to_check) in targets: | |
total += 1 | |
# Check diagonally | |
directions = [(0,0), (1,1),(2,2),(3,3)] | |
to_check = "" | |
for dx, dy in directions: | |
if (i+dx) in range(M) and (j+dy) in range(N): | |
to_check += data[i+dx][j+dy] | |
if to_check in targets: | |
total += 1 | |
# Check other diagonal | |
directions = [(0,0), (-1,1),(-2, 2),(-3, 3)] | |
to_check = "" | |
for dx, dy in directions: | |
if (i+dx) in range(M) and (j+dy) in range(N): | |
to_check += data[i+dx][j+dy] | |
if to_check in targets: | |
total += 1 | |
print(total) | |
## Part 2 | |
targets = ["SAM", "MAS"] | |
total = 0 | |
for i in range(M): | |
for j in range(N): | |
if data[i][j] == "A": | |
dir1 = [(-1,-1), (0,0), (1,1)] | |
to_check1 = "" | |
for dx, dy in dir1: | |
if (i+dx) in range(M) and (j+dy) in range(N): | |
to_check1 += data[i+dx][j+dy] | |
dir2 = [(1,-1), (0,0), (-1,1)] | |
to_check2 = "" | |
for dx, dy in dir2: | |
if (i+dx) in range(M) and (j+dy) in range(N): | |
to_check2 += data[i+dx][j+dy] | |
if to_check1 in targets and to_check2 in targets: | |
total += 1 | |
print(total) | |