summaryrefslogtreecommitdiff
path: root/2024/12/python/main.py
blob: 6faa6f1eff90da0c024877dc4735712fa1917d41 (plain)
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
from fileinput import input

grid = {
    complex(idx, idy): c
    for idy, line in enumerate(input())
    for idx, c in enumerate(line.strip())
}
xmax = int(max(x.real for x in grid.keys()))
ymax = int(max(x.imag for x in grid.keys()))

seen = set()

silver = 0

for x in range(xmax + 1):
    for y in range(ymax + 1):
        c = complex(x, y)
        if c in seen:
            continue

        # Flood fill
        char = grid[c]
        perimeter = area = 0
        queue = [c]
        while queue:
            curr = queue.pop()
            if curr in seen:
                continue
            seen.add(curr)

            for dir in [1, -1, 1j, -1j]:
                next_ = curr + dir
                if (
                    not (0 <= next_.real <= xmax and 0 <= next_.imag <= ymax)
                    or grid[next_] != char
                ):
                    perimeter += 1
                    continue

                queue.append(next_)
            area += 1
        silver += perimeter * area

gold = 0

print("silver:", silver)
print("gold:", gold)