File size: 1,852 Bytes
a4da721
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
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)