2025(08): solve part 1 (it's not quick)

CPU times: user 3.14 s, sys: 0 ns, total: 3.14 s
Wall time: 3.15 s
This commit is contained in:
2025-12-09 20:10:40 +01:00
parent 76e962969d
commit a3e148f9ba
3 changed files with 1027 additions and 9 deletions

View File

@ -1,4 +1,5 @@
import numpy as np
from math import prod
debug = False
@ -61,6 +62,7 @@ def get_circuits(junctions, connections):
"""
# circuits = [[x] for x in range(len(junctions))]
circuits = [list(x) for x in connections]
circuits += [[x] for x in range(len(junctions))]
changed = True
while changed:
changed = False
@ -69,19 +71,27 @@ def get_circuits(junctions, connections):
for x in circuits[i]:
if x in circuits[j]:
# NOTE: Elements might appear multiple times per circuit.
circuits[i] += circuits.pop[j]
circuits[i] += circuits[j]
circuits[j] = []
changed = True
return circuits
def product_largest_three_circuits(junctions, num_of_connections):
X, Y, dists = distances(junctions)
connections = []
for i in range(num_of_connections):
x, y = X[i], Y[i]
connections.append((x, y))
circuits = get_circuits(junctions, connections)
lengths = [len(set(circuit)) for circuit in circuits if circuit != []]
lengths.sort()
return prod(lengths[-3:])
if __name__ == "__main__":
test_junctions = load_junctions("testinput")
X, Y, dists = distances(test_junctions)
connections = []
# unconnected = list(range(len(test_junctions)))
assert product_largest_three_circuits(test_junctions, 10) == 40
for i in range(len(X)):
x, y = X[i], Y[i]
if not is_connected(x, connections) and not is_connected(y, connections):
connections.append((x, y))
print(len(connections))
junctions = load_junctions("input")
print(product_largest_three_circuits(junctions, 1000))