diff --git a/year25/day8.go b/year25/day8.go index 2d4dfdc..1454682 100644 --- a/year25/day8.go +++ b/year25/day8.go @@ -72,24 +72,16 @@ func Day8Part1(ctx aoc.Context, steps int) (int, error) { return 0, fmt.Errorf("day8: failed to parse input %w", err) } - sm := NewClustersDB(boxes) - var distances = SortedDistances(boxes) - - for _, d := range distances[:steps] { - el1Id, el2Id, distance := d.E1, d.E2, d.Distance - if distance != 0 && (sm.GetClusterId(el1Id) != sm.GetClusterId(el2Id)) { - sm.JoinClustersByElements(el1Id, el2Id) + db := NewClustersDB(boxes) + for _, d := range SortedDistances(boxes)[:steps] { + if d.Distance != 0 && (db.GetClusterId(d.E1) != db.GetClusterId(d.E2)) { + db.JoinClustersByElements(d.E1, d.E2) } } - ints := slices.Clone(sm.clusterToSize) + ints := slices.Clone(db.clusterToSize) slices.Sort(ints) - - sol := 1 - for _, i := range ints[len(ints)-3:] { - sol *= i - } - return sol, nil + return aoc.Prod(ints[len(ints)-3:]), nil } func Day8Part2(ctx aoc.Context) (int, error) { @@ -99,15 +91,13 @@ func Day8Part2(ctx aoc.Context) (int, error) { return 0, fmt.Errorf("day8: failed to parse input %w", err) } - sm := NewClustersDB(boxes) - var distances = SortedDistances(boxes) + db := NewClustersDB(boxes) - for _, d := range distances { - el1Id, el2Id, distance := d.E1, d.E2, d.Distance - if distance != 0 && (sm.GetClusterId(el1Id) != sm.GetClusterId(el2Id)) { - sm.JoinClustersByElements(el1Id, el2Id) - if sm.clusterToSize[sm.GetClusterId(el1Id)] == len(boxes) { - return int(boxes[el1Id][0]) * int(boxes[el2Id][0]), nil + for _, d := range SortedDistances(boxes) { + if d.Distance != 0 && (db.GetClusterId(d.E1) != db.GetClusterId(d.E2)) { + db.JoinClustersByElements(d.E1, d.E2) + if db.clusterToSize[db.GetClusterId(d.E1)] == len(boxes) { + return int(boxes[d.E1][0]) * int(boxes[d.E2][0]), nil } } }