|
- grid = {}
- for y, line in enumerate(open(0)):
- for x, char in enumerate(line[:-1]):
- grid[complex(x, y)] = char
-
- ans1 = 0
- for p, v in grid.items():
- if all(grid[p + s] > v for s in [1, -1, 1j, -1j] if p + s in grid):
- ans1 += int(v) + 1
- print(ans1)
-
- valid = {k for k, v in grid.items() if v != '9'}
- pending = valid.copy()
- basin_sizes = []
- while pending:
- edge = {pending.pop()}
- seen = edge.copy()
- while edge:
- edge = {p + s for p in edge for s in [1, -1, 1j, -1j]} & valid - seen
- seen |= edge
- pending -= seen
- basin_sizes.append(len(seen))
- *_, x, y, z = sorted(basin_sizes)
- print(x * y * z)
|