generated from kotlin-hands-on/advent-of-code-kotlin-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDay04.kt
51 lines (40 loc) · 1.35 KB
/
Day04.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package year2022.`04`
import readInput
fun main() {
fun List<Int>.asRange(): IntRange {
return first()..get(1)
}
fun IntRange.contains(range: IntRange): Boolean {
return first >= range.first && last <= range.last
}
fun IntRange.overlaps(range: IntRange): Boolean {
return toSet().intersect(range.toSet()).isNotEmpty()
}
fun String.toPairOfRanges(): Pair<IntRange, IntRange> {
val list = split(",")
return list.first().split("-").map { it.toInt() }.asRange() to
list[1].split("-").map { it.toInt() }.asRange()
}
fun part1(input: List<String>): Int {
return input
.map { it.toPairOfRanges() }
.filter { (leftRange, rightRange) ->
leftRange.contains(rightRange) || rightRange.contains(leftRange)
}
.size
}
fun part2(input: List<String>): Int {
return input
.map { it.toPairOfRanges() }
.filter { (leftRange, rightRange) -> leftRange.overlaps(rightRange) }
.size
}
// test if implementation meets criteria from the description, like:
val testInput = readInput("Day04_test")
val part1Test = part2(testInput)
println(part1Test)
check(part1Test == 4)
val input = readInput("Day04")
println(part1(input))
println(part2(input))
}