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)
|