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