This commit is contained in:
Chris Hodges 2025-12-05 06:21:02 +01:00
parent 732c69df0e
commit c82509468a

86
src/aoc2025/Day05.kt Normal file
View File

@ -0,0 +1,86 @@
package aoc2025
import println
import readInput
/*
--- Day 5: Cafeteria ---
https://adventofcode.com/2025/day/5
*/
fun main() {
val inlineTestInput = """
3-5
10-14
16-20
12-18
1
5
8
11
17
32
"""
fun part1(input: List<String>): Int {
val ranges = ArrayList<LongRange>()
var freshNum = 0
for (i in input) {
if (i.contains("-")) {
val (low, high) = i.split("-").map { it.toLong() }
ranges.add(LongRange(low, high))
} else if (i.isNotBlank()) {
if (ranges.any { i.toLong() in it }) freshNum++
}
}
return freshNum
}
fun part2(input: List<String>): Long {
var freshSum = 0L
val ranges = ArrayList<LongRange>()
for (i in input) {
if (i.contains("-")) {
val (low, high) = i.split("-").map { it.toLong() }
ranges.add(LongRange(low, high))
}
}
val consolidated = ArrayList<LongRange>()
ranges.sortBy { it.first }
var lastLow = ranges[0].first
var lastHigh = ranges[0].last
for (r in 1..ranges.lastIndex) {
if (ranges[r].first > lastHigh) {
consolidated.add(LongRange(lastLow, lastHigh))
lastLow = ranges[r].first
lastHigh = ranges[r].last
} else {
lastHigh = lastHigh.coerceAtLeast(ranges[r].last)
}
}
consolidated.add(LongRange(lastLow, lastHigh))
for (r in consolidated) {
val e = r.last - r.first + 1
// had read that you should sum all of the IDs, then it would have been e * r.first + (e * e + 1) / 2
freshSum += e
}
return freshSum
}
// test if implementation meets criteria from the description, like:
val testInput = inlineTestInput.trim().reader().readLines()
//val testInput = readInput("aoc2025/Day05_test")
val testInputPart1Result = part1(testInput)
println("Part 1 Test: $testInputPart1Result")
val testInputPart2Result = part2(testInput)
println("Part 2 Test: $testInputPart2Result")
check(testInputPart1Result == 3)
check(testInputPart2Result == 14L)
val input = readInput("aoc2025/Day05")
part1(input).println()
part2(input).println()
}