Skip to content

Commit d0d66a9

Browse files
committed
Solve 2025 day 8 part 2
1 parent f74bfdd commit d0d66a9

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/main/scala/eu/sim642/adventofcode2025/Day8.scala

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,27 @@ object Day8 {
6464
.product
6565
}
6666

67+
// TODO: deduplicate
68+
def multiplyLastXs(junctionBoxes: Seq[Pos3]): Int = {
69+
val closestPairs =
70+
junctionBoxes.combinations(2)
71+
.map({ case Seq(p1, p2) => (p1, p2) })
72+
.toSeq
73+
.sortBy(_ euclideanDistance _)
74+
75+
// TODO: clean up
76+
val size = junctionBoxes.size
77+
val ufAfter = closestPairs.iterator
78+
.scanLeft((new UnionFind(junctionBoxes), 0))({ case ((uf, edges), (p1, p2)) =>
79+
if (uf.sameRepr(p1, p2))
80+
(uf, edges)
81+
else
82+
(uf.unioned(p1, p2), edges + 1)
83+
}).tail.zip(closestPairs).find(_._1._2 == size - 1).get._2
84+
85+
ufAfter._1.x * ufAfter._2.x
86+
}
87+
6788
def parseJunctionBox(s: String): Pos3 = s match {
6889
case s"$x,$y,$z" => Pos3(x.toInt, y.toInt, z.toInt)
6990
}
@@ -73,6 +94,7 @@ object Day8 {
7394
lazy val input: String = scala.io.Source.fromInputStream(getClass.getResourceAsStream("day8.txt")).mkString.trim
7495

7596
def main(args: Array[String]): Unit = {
76-
println(multiplySizesAfter(parseJunctionBoxes(input)))
97+
//println(multiplySizesAfter(parseJunctionBoxes(input)))
98+
println(multiplyLastXs(parseJunctionBoxes(input)))
7799
}
78100
}

src/test/scala/eu/sim642/adventofcode2025/Day8Test.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,12 @@ class Day8Test extends AnyFunSuite {
3434
test("Part 1 input answer") {
3535
assert(multiplySizesAfter(parseJunctionBoxes(input)) == 52668)
3636
}
37+
38+
test("Part 2 examples") {
39+
assert(multiplyLastXs(parseJunctionBoxes(exampleInput)) == 25272)
40+
}
41+
42+
test("Part 2 input answer") {
43+
assert(multiplyLastXs(parseJunctionBoxes(input)) == 1474050600)
44+
}
3745
}

0 commit comments

Comments
 (0)