Skip to content

Commit 716a5e4

Browse files
committed
[2025/5] Cafeteria (Part 2)
1 parent 16ed2d4 commit 716a5e4

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

src/main/kotlin/adventofcode/year2025/Day05Cafeteria.kt

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package adventofcode.year2025
22

33
import adventofcode.Puzzle
44
import adventofcode.PuzzleInput
5+
import kotlin.math.max
56

67
class Day05Cafeteria(
78
customInput: PuzzleInput? = null,
@@ -11,13 +12,28 @@ class Day05Cafeteria(
1112

1213
return Pair(
1314
ranges.map { range ->
14-
val (start, end) = range.split("-").map(String::toLong)
15-
LongRange(start, end)
15+
val (from, to) = range.split("-").map(String::toLong)
16+
LongRange(from, to)
1617
},
1718
ids.map(String::toLong),
1819
)
1920
}
2021

22+
override fun partTwo() =
23+
parseInput()
24+
.first
25+
.sortedBy { range -> range.first }
26+
.fold(emptyList<LongRange>()) { ranges, range ->
27+
when {
28+
ranges.isEmpty() -> listOf(range)
29+
30+
range.first - 1 <= ranges.last().last ->
31+
ranges.dropLast(1) + listOf(ranges.last().first..max(ranges.last().last, range.last))
32+
33+
else -> ranges + listOf(range)
34+
}
35+
}.sumOf { range -> range.last - range.first + 1 }
36+
2137
override fun partOne() =
2238
parseInput()
2339
.let { (ranges, ids) -> ids.count { id -> ranges.any { range -> range.contains(id) } } }

src/test/kotlin/adventofcode/year2025/Day05CafeteriaSpec.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ package adventofcode.year2025
22

33
import adventofcode.PuzzleBaseSpec
44

5-
class Day05CafeteriaSpec : PuzzleBaseSpec(3)
5+
class Day05CafeteriaSpec : PuzzleBaseSpec(3, 14)

0 commit comments

Comments
 (0)