Solve 2023:11 "Cosmic Expansion"
This commit is contained in:
parent
a1bf11a5ed
commit
9ca8607f8b
1 changed files with 63 additions and 0 deletions
63
2023-python/output/day_11.py
Normal file
63
2023-python/output/day_11.py
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
from itertools import combinations
|
||||||
|
from output import answer
|
||||||
|
|
||||||
|
n = 11
|
||||||
|
title = "Cosmic Expansion"
|
||||||
|
|
||||||
|
|
||||||
|
@answer(1, "Sum of all galaxy shortest distances is {}")
|
||||||
|
def part_1(data):
|
||||||
|
return data[0]
|
||||||
|
|
||||||
|
|
||||||
|
@answer(2, "Exapanding by 1M, sum is {}")
|
||||||
|
def part_2(data):
|
||||||
|
return data[1]
|
||||||
|
|
||||||
|
|
||||||
|
def presolve(data):
|
||||||
|
m = data.splitlines()
|
||||||
|
er = set()
|
||||||
|
ec = set()
|
||||||
|
for i, r in enumerate(m):
|
||||||
|
if "#" not in r:
|
||||||
|
er.add(i)
|
||||||
|
for i, c in enumerate(zip(*m)):
|
||||||
|
if "#" not in c:
|
||||||
|
ec.add(i)
|
||||||
|
h = len(m)
|
||||||
|
w = len(m[0])
|
||||||
|
g1 = []
|
||||||
|
g2 = []
|
||||||
|
e = 1e6
|
||||||
|
for r in range(h):
|
||||||
|
for c in range(w):
|
||||||
|
if m[r][c] == "#":
|
||||||
|
ro = len(er & set(range(r)))
|
||||||
|
co = len(ec & set(range(c)))
|
||||||
|
g1.append((r + ro, c + co))
|
||||||
|
g2.append((ro * e + r - ro, co * e + c - co))
|
||||||
|
p1 = sum(
|
||||||
|
abs(rc1[0] - rc2[0]) + abs(rc1[1] - rc2[1]) for rc1, rc2 in combinations(g1, 2)
|
||||||
|
)
|
||||||
|
p2 = int(
|
||||||
|
sum(
|
||||||
|
abs(rc1[0] - rc2[0]) + abs(rc1[1] - rc2[1])
|
||||||
|
for rc1, rc2 in combinations(g2, 2)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return p1, p2
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
with open("./input/11.txt", "r") as f:
|
||||||
|
inp = f.read().strip()
|
||||||
|
|
||||||
|
inp = presolve(inp)
|
||||||
|
|
||||||
|
a = part_1(inp)
|
||||||
|
b = part_2(inp)
|
||||||
|
|
||||||
|
assert a == 9370588
|
||||||
|
assert b == 746207878188
|
||||||
Loading…
Add table
Reference in a new issue