Skip to content

Commit 6768ff7

Browse files
committed
Day02
1 parent 723ef0e commit 6768ff7

File tree

4 files changed

+47
-0
lines changed

4 files changed

+47
-0
lines changed

src/main/kotlin/Day02.kt

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import kotlin.io.path.readText
2+
3+
class Day02 : Day {
4+
private val twiceRepeatPattern = Regex("""^(.*)\1$""")
5+
private val atLeastTwiceRepeatPattern = Regex("""^(.*)(\1)+$""")
6+
7+
override fun partOne(filename: String, verbose: Boolean): Long =
8+
twiceRepeatPattern.sumDuplicates(filename, verbose)
9+
10+
override fun partTwo(filename: String, verbose: Boolean) =
11+
atLeastTwiceRepeatPattern.sumDuplicates(filename, verbose)
12+
13+
private fun Regex.sumDuplicates(filename: String, verbose: Boolean): Long {
14+
val ranges = filename.asPath().readText().split(',').map {
15+
val (start, end) = it.split('-')
16+
(start.toLong()..end.toLong())
17+
}
18+
if (verbose) {
19+
ranges.forEach { range ->
20+
println("${range.first}-${range.last}")
21+
}
22+
}
23+
val duplicates = ranges.flatMap { range ->
24+
range.mapNotNull { number ->
25+
number.takeIf { it.toString().matches(this) }
26+
}
27+
}
28+
if (verbose) {
29+
duplicates.forEach {
30+
println("duplicate=$it")
31+
}
32+
}
33+
34+
return duplicates.sum()
35+
}
36+
37+
companion object : Day.Main("Day02.txt") {
38+
@JvmStatic
39+
fun main(args: Array<String>) = main()
40+
}
41+
}

src/main/resources/Day02.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
385350926-385403705,48047-60838,6328350434-6328506208,638913-698668,850292-870981,656-1074,742552-796850,4457-6851,138-206,4644076-4851885,3298025-3353031,8594410816-8594543341,396-498,1558-2274,888446-916096,12101205-12154422,2323146444-2323289192,37-57,101-137,46550018-46679958,79-96,317592-341913,495310-629360,33246-46690,14711-22848,1-17,2850-4167,3723700171-3723785996,190169-242137,272559-298768,275-365,7697-11193,61-78,75373-110112,425397-451337,9796507-9899607,991845-1013464,77531934-77616074

src/test/kotlin/Day02Test.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
class Day02Test : DayTest<Day02>("Day02_test.txt") {
2+
override val partOneExpected = 1227775554L
3+
override val partTwoExpected = 4174379265L
4+
}

src/test/resources/Day02_test.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124

0 commit comments

Comments
 (0)