day 8
This commit is contained in:
parent
8cf000940c
commit
0ef0ffc515
@ -72,24 +72,16 @@ func Day8Part1(ctx aoc.Context, steps int) (int, error) {
|
|||||||
return 0, fmt.Errorf("day8: failed to parse input %w", err)
|
return 0, fmt.Errorf("day8: failed to parse input %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sm := NewClustersDB(boxes)
|
db := NewClustersDB(boxes)
|
||||||
var distances = SortedDistances(boxes)
|
for _, d := range SortedDistances(boxes)[:steps] {
|
||||||
|
if d.Distance != 0 && (db.GetClusterId(d.E1) != db.GetClusterId(d.E2)) {
|
||||||
for _, d := range distances[:steps] {
|
db.JoinClustersByElements(d.E1, d.E2)
|
||||||
el1Id, el2Id, distance := d.E1, d.E2, d.Distance
|
|
||||||
if distance != 0 && (sm.GetClusterId(el1Id) != sm.GetClusterId(el2Id)) {
|
|
||||||
sm.JoinClustersByElements(el1Id, el2Id)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ints := slices.Clone(sm.clusterToSize)
|
ints := slices.Clone(db.clusterToSize)
|
||||||
slices.Sort(ints)
|
slices.Sort(ints)
|
||||||
|
return aoc.Prod(ints[len(ints)-3:]), nil
|
||||||
sol := 1
|
|
||||||
for _, i := range ints[len(ints)-3:] {
|
|
||||||
sol *= i
|
|
||||||
}
|
|
||||||
return sol, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func Day8Part2(ctx aoc.Context) (int, error) {
|
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)
|
return 0, fmt.Errorf("day8: failed to parse input %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sm := NewClustersDB(boxes)
|
db := NewClustersDB(boxes)
|
||||||
var distances = SortedDistances(boxes)
|
|
||||||
|
|
||||||
for _, d := range distances {
|
for _, d := range SortedDistances(boxes) {
|
||||||
el1Id, el2Id, distance := d.E1, d.E2, d.Distance
|
if d.Distance != 0 && (db.GetClusterId(d.E1) != db.GetClusterId(d.E2)) {
|
||||||
if distance != 0 && (sm.GetClusterId(el1Id) != sm.GetClusterId(el2Id)) {
|
db.JoinClustersByElements(d.E1, d.E2)
|
||||||
sm.JoinClustersByElements(el1Id, el2Id)
|
if db.clusterToSize[db.GetClusterId(d.E1)] == len(boxes) {
|
||||||
if sm.clusterToSize[sm.GetClusterId(el1Id)] == len(boxes) {
|
return int(boxes[d.E1][0]) * int(boxes[d.E2][0]), nil
|
||||||
return int(boxes[el1Id][0]) * int(boxes[el2Id][0]), nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user