@@ -2,22 +2,46 @@ package de.jball.aoc2025.day02
22
33import de.jball.AdventOfCodeDay
44
5- class Day02 (test : Boolean = false ): AdventOfCodeDay<Long>(test, 1227775554L , 0L ) {
6- val ranges = input[0 ].split(" ," ).map { rangeString ->
7- val rangeNums = rangeString.split(" -" )
8- .map { numberString -> numberString.toLong() }
9- rangeNums[0 ].. rangeNums[1 ]
5+ class Day02 (test : Boolean = false ): AdventOfCodeDay<Long>(test, 1227775554L , 4174379265L ) {
6+ val ranges = input[0 ]
7+ .split(" ," )
8+ .map { rangeString ->
9+ val rangeNums = rangeString.split(" -" )
10+ .map { numberString -> numberString.toLong() }
11+ rangeNums[0 ].. rangeNums[1 ]
1012 }
1113
1214 override fun part1 (): Long {
13- ranges.map { range ->
14- range.map { it.toString() }
15+ return ranges.sumOf { range ->
16+ sumOfInvalidIds(range, { idString ->
17+ val windowSize = idString.length / 2 + idString.length % 2
18+ windowSize.. windowSize
19+ })
1520 }
16- TODO (" Not yet implemented" )
21+ }
22+
23+ private fun sumOfInvalidIds (range : LongRange , windowFunction : (id: String ) -> IntRange ): Long = range.map { number ->
24+ number.toString()
25+ }.filter { idString ->
26+ windowFunction(idString)
27+ .any { windowSize ->
28+ // if the different parts of the id string are all equal, then the distinct call would result in a list of size 1.
29+ idString.windowed(windowSize, windowSize, true ).distinct().size == 1
30+ }
31+ }.sumOf { numberString ->
32+ numberString.toLong()
1733 }
1834
1935 override fun part2 (): Long {
20- TODO (" Not yet implemented" )
36+ return ranges.sumOf { range ->
37+ sumOfInvalidIds(range, { idString ->
38+ 1 .. (idString.length / 2 + idString.length % 2 )
39+ })
40+ }
2141 }
2242
2343}
44+
45+ fun main () {
46+ Day02 ().run ()
47+ }
0 commit comments