Skip to content

Commit 618cfa9

Browse files
committed
Optimize 2025 day 8 part 1 using sizes from UnionFind
1 parent f92b7ae commit 618cfa9

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ object Day8 {
3939
val closestPairs = iterateClosestPairs(junctionBoxes)
4040
val (ufAfter, _) = Kruskal.iterate(junctionBoxes, closestPairs)(after)
4141

42-
ufAfter.groups()
42+
ufAfter.rootNodes
4343
.map(_.size)
44+
.toSeq
4445
.sorted(using Ordering.Int.reverse)
4546
.take(sizes)
4647
.product

src/main/scala/eu/sim642/adventofcodelib/UnionFind.scala

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ class UnionFind[A](val nodes: Map[A, Node[A]]) {
3838
new UnionFind(nodes + (yRepr -> yNode.copy(size = xNode.size + yNode.size)) + (xRepr -> xNode.copy(parent = yRepr)))
3939
}
4040

41-
def groups(): Seq[Seq[A]] =
42-
nodes.keys.groupBy(findRepr).values.map(_.toSeq).toSeq
41+
def components: Iterable[Iterable[A]] =
42+
nodes.keys.groupBy(findRepr).values
43+
44+
def rootNodes: Iterable[Node[A]] =
45+
nodes.view.filter((x, node) => x == node.parent).values
4346

4447
override def toString: String = nodes.toString()
4548
}

0 commit comments

Comments
 (0)