This commit is contained in:
Aéna Aria 2025-12-08 11:27:20 +01:00
parent e74bd54997
commit b16a7975bc
4 changed files with 1111 additions and 40 deletions

View file

@ -1,34 +1,41 @@
import numpy
with open(r'day8/input.txt', 'r') as input:
lines = list(map(lambda x: list(map(lambda y: int(y),x.split(','))),input.read().split('\n')[:-1]))
def dist(a,b):
return (a[0]-b[0])**2 + (a[1]-b[1])**2 + (a[2]-b[2])**2
def find_best(i, exclusion = []):
best_distances[i] = [100000000,-1]
excluded_neigbors = [set([i]) for i in range(len(lines))]
def find_best(i):
best_distances[i] = [10**15,-1]
for j,node2 in enumerate(lines):
print(exclusion)
if i == j or j in exclusion: continue
distance = dist(node,node2)
if j in excluded_neigbors[i]: continue
distance = dist(lines[i],node2)
best_distances[i] = min([distance,j], best_distances[i],key=lambda x : x[0])
best_distances = []
idx_circuit = {}
idx_circuit = list(range(len(lines)))
for i,node in enumerate(lines):
idx_circuit[i] = i
for i in range(len(lines)):
best_distances.append(0)
find_best(i)
pairs_left = 1000
while pairs_left > 0:
i = numpy.argmin(best_distances)
print(i, best_distances[i])
print(idx_circuit)
idx_circuit[best_distances[i][1]] = idx_circuit[i]
print(idx_circuit.keys())
find_best(i, exclusion=filter(lambda x: idx_circuit[x] == idx_circuit[i], idx_circuit.keys()))
for _ in range(1000):
min_idx = best_distances.index(min(best_distances, key = lambda x:x[0]))
if (old_idx := idx_circuit[min_idx]) != (new_idx := idx_circuit[(ass_idx := best_distances[min_idx][1])]):
for i in range(len(lines)):
if idx_circuit[i] == old_idx:
idx_circuit[i] = new_idx
excluded_neigbors[min_idx].add(ass_idx)
excluded_neigbors[ass_idx].add(min_idx)
find_best(min_idx)
find_best(ass_idx)
counts = []
for circuit in set(idx_circuit):
count = len(list(filter(lambda x: idx_circuit[x] == circuit,idx_circuit)))
counts.append(count)
counts.sort(reverse=True)
print(counts)
print("score:",counts[0]*counts[1]*counts[2])