Skip to content

Commit 40de16e

Browse files
committed
Extract common parts code in 2025 day 9
1 parent af99f1a commit 40de16e

File tree

1 file changed

+14
-13
lines changed
  • src/main/scala/eu/sim642/adventofcode2025

1 file changed

+14
-13
lines changed

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

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,21 +11,28 @@ import scala.collection.mutable
1111
object Day9 {
1212

1313
trait Part {
14-
def largestArea(redTiles: Seq[Pos]): Long
15-
}
14+
def makeIsValid(redTiles: Seq[Pos]): Box => Boolean
15+
16+
def largestArea(redTiles: Seq[Pos]): Long = {
17+
val isValid = makeIsValid(redTiles)
1618

17-
object Part1 extends Part {
18-
override def largestArea(redTiles: Seq[Pos]): Long = {
1919
(for {
2020
// faster than combinations(2)
2121
(p1, i) <- redTiles.iterator.zipWithIndex
2222
p2 <- redTiles.view.slice(i + 1, redTiles.size).iterator
23-
} yield Box.bounding(Seq(p1, p2)).size[Long]).max
23+
box = Box.bounding(Seq(p1, p2))
24+
if isValid(box)
25+
} yield box.size[Long]).max
2426
}
2527
}
2628

29+
object Part1 extends Part {
30+
override def makeIsValid(redTiles: Seq[Pos]): Box => Boolean =
31+
_ => true
32+
}
33+
2734
object Part2 extends Part {
28-
override def largestArea(redTiles: Seq[Pos]): Long = {
35+
override def makeIsValid(redTiles: Seq[Pos]): Box => Boolean = {
2936
// TODO: clean up
3037
// TODO: optimize (with polygon checks?)
3138
val xs = redTiles.map(_.x).distinct.sorted
@@ -92,13 +99,7 @@ object Day9 {
9299
outsidePrefix(gridBox.min.y - 1)(gridBox.min.x - 1)) == 0
93100
}
94101

95-
(for {
96-
// faster than combinations(2)
97-
(p1, i) <- redTiles.iterator.zipWithIndex
98-
p2 <- redTiles.view.slice(i + 1, redTiles.size).iterator
99-
box = Box.bounding(Seq(p1, p2))
100-
if isValid(box)
101-
} yield box.size[Long]).max
102+
isValid
102103
}
103104
}
104105

0 commit comments

Comments
 (0)