|
- import itertools
-
-
- def star_dist(a, b, N):
- (xa, xb), (ya, yb) = map(sorted, zip(a, b))
- sx = sum(xa < x < xb for x in xs)
- sy = sum(ya < y < yb for y in ys)
- return (xb - xa) + (yb - ya) + (N - 1) * (sx + sy)
-
-
- text = open(0).read()
- ys = {i for i, ln in enumerate(text.splitlines()) if set(ln) == {'.'}}
- xs = {i for i, ln in enumerate(zip(*text.splitlines())) if set(ln) == {'.'}}
- stars = {(x, y) for y, row in enumerate(text.splitlines()) for x, val in enumerate(row) if val == '#'}
- print(sum(star_dist(a, b, 2) for a, b in itertools.combinations(stars, 2)))
- print(sum(star_dist(a, b, 1_000_000) for a, b in itertools.combinations(stars, 2)))
|