• [^] # Re: Jour 8

    Posté par . En réponse au journal Advent of Code 2025. Évalué à 2.

    Beaucoup moins académique que Guillaume, très itératif, les deux parties en 22 lignes:

    boxes = [tuple(map(int, line.split(","))) for line in open(0).read().strip().split('\n')]
    clusters = dict()
    for c, (_,(i,j)) in enumerate(
     sorted(((x-l)**2+(y-m)**2+(z-n)**2, (i,i+1+j))
     for i, (x,y,z) in enumerate(boxes)
     for j, (l,m,n) in enumerate(boxes[i+1:]))):
     icl = [[k for (k,v) in clusters.items() if i in v] or ["ALONE"]][0][0]
     jcl = [[k for (k,v) in clusters.items() if j in v] or ["ALONE"]][0][0]
     match (icl == "ALONE", jcl == "ALONE", icl == jcl):
     case (False, False, False): # both belongs to different clusters, merge clusters
     clusters[f'{i}_{j}'] = clusters[icl] | clusters[jcl]
     del clusters[icl]
     del clusters[jcl]
     case (False, True, _):
     clusters[icl].add(j)
     case (True, False, _):
     clusters[jcl].add(i)
     case (True, True, _): # both out of clusters, create a new cluster with them
     clusters[f'{i}_{j}'] = {i, j}
     # else (False, False, True), i and j are in the same cluster
     if c == 1000:
     s = sorted(map(len, clusters.values()))
     print(s[-1]*s[-2]*s[-3])
     if c > 1000 and len(clusters) == 1:
     print(boxes[i][0]*boxes[j][0]) # 5267 conns
     break