diff options
Diffstat (limited to '2025/day08.py')
| -rwxr-xr-x | 2025/day08.py | 64 |
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) + |
