This commit is contained in:
Samuel Enocsson
2025-12-09 18:34:52 +01:00
parent ab7140860d
commit 79faf6c1a0
2 changed files with 82 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
"""Day 8: Advent of Code 2025."""
import time
from aoc import read_lines
import math
from functools import reduce
def distance(start: tuple[int,int,int], end: tuple[int,int,int]):
return math.sqrt(math.pow(start[0] - end[0], 2) + math.pow(start[1] - end[1], 2) + math.pow(start[2] - end[2], 2))
def part1(data):
paths = {}
i = 0
while i < len(data):
t = data[i]
min_dist, closest = min((distance(t, y), y) for y in data if y != t)
paths[tuple(t), tuple(closest)] = min_dist
i += 1
sp = list(sorted(paths.items(), key=lambda x: x[1]))
circuits = []
for jb in sp[10:]:
t1, t2 = jb[0]
matching = [i for i, c in enumerate(circuits) if t1 in c or t2 in c]
if not matching:
circuits.append({t1, t2})
elif len(matching) == 1:
circuits[matching[0]].update({t1, t2})
else:
# Merga circuits
merged = {t1, t2}
for i in sorted(matching, reverse=True):
merged.update(circuits.pop(i))
circuits.append(merged)
pass
def part2(data):
"""Solve part 2."""
pass
if __name__ == "__main__":
DAY = 8 # <- ändra till rätt dag
data = read_lines(DAY)
array = [[int(x) for x in line.split(',')] for line in data]
t0 = time.perf_counter()
p1 = part1(array)
t1 = time.perf_counter()
print(f"Part 1: {p1} ({(t1-t0)*1000:.2f} ms)")
t0 = time.perf_counter()
p2 = part2(data)
t1 = time.perf_counter()
print(f"Part 2: {p2} ({(t1-t0)*1000:.2f} ms)")