summaryrefslogtreecommitdiff
path: root/2025/day08.py
diff options
context:
space:
mode:
Diffstat (limited to '2025/day08.py')
-rwxr-xr-x2025/day08.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/2025/day08.py b/2025/day08.py
new file mode 100755
index 0000000..4baa036
--- /dev/null
+++ b/2025/day08.py
@@ -0,0 +1,64 @@
+#!/usr/bin/env python3
+from functools import reduce
+from re import findall
+from copy import deepcopy
+import sys
+import numpy as np
+from collections import defaultdict
+from operator import mul
+
+filename = sys.argv[1] if len(sys.argv) == 2 \
+ else "in/" + sys.argv[0].split('/')[-1].rstrip(".py") + ".pzl"
+data = open(filename).read()
+lines = data.rstrip('\n').split('\n')
+
+counter = 0
+points = []
+for line in lines:
+ a = line.split(',')
+ x,y,z = [int(i) for i in a]
+ points.append((counter, x, y, z))
+ counter += 1
+
+def dist(p0, p1):
+ _, x0, y0, z0 = p0
+ _, x1, y1, z1 = p1
+ return np.sqrt((x1 - x0)**2 + (y1 - y0)**2 + (z1 - z0)**2)
+
+
+D = []
+for i, p0 in enumerate(points):
+ for p1 in points[i+1:]:
+ d = dist(p0, p1)
+ D.append((d, p0, p1))
+D.sort()
+
+groups = [i for i in range(len(points))]
+
+res1 = 0
+res2 = 0
+count = 0
+for d, p0, p1 in D:
+ g0 = groups[p0[0]]
+ g1 = groups[p1[0]]
+ m = min(g0, g1)
+ for i in range(len(groups)):
+ if groups[i] == g0 or groups[i] == g1:
+ groups[i] = m
+
+ hist = defaultdict(int)
+ for i in groups:
+ hist[i] += 1
+
+ count += 1
+ if count == 1000:
+ res1 = reduce(mul, sorted(hist.values(), reverse=True)[:3])
+ if len(hist) == 1:
+ res2 = p0[1] * p1[1]
+
+ if res1 != 0 and res2 != 0:
+ break
+
+print('res1:', res1)
+print('res2:', res2)
+