@@ -13,30 +13,31 @@ class Day02(test: Boolean = false): AdventOfCodeDay<Long>(test, 1227775554L, 417
1313
1414 override fun part1 (): Long {
1515 return ranges.sumOf { range ->
16- sumOfInvalidIds(range, { idString ->
17- val windowSize = idString.length / 2 + idString.length % 2
18- windowSize.. windowSize
19- })
16+ sumOfInvalidIds(range) { id ->
17+ val idString = id.toString()
18+ if (idString.length % 2 != 0 )
19+ false
20+ else
21+ idString.take(idString.length / 2 ) == idString.substring(idString.length / 2 )
22+ }
2023 }
2124 }
2225
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()
33- }
26+ private fun sumOfInvalidIds (range : LongRange , idTest : (Long ) -> Boolean ): Long = range
27+ .filter { id ->
28+ idTest(id)
29+ }.sumOf { numberString ->
30+ numberString
31+ }
3432
3533 override fun part2 (): Long {
3634 return ranges.sumOf { range ->
37- sumOfInvalidIds(range, { idString ->
38- 1 .. (idString.length / 2 + idString.length % 2 )
39- })
35+ sumOfInvalidIds(range) { id ->
36+ val idString = id.toString()
37+ (1 .. idString.length/ 2 ).any { windowSize ->
38+ idString.windowed(windowSize, windowSize, true ).distinct().size == 1
39+ }
40+ }
4041 }
4142 }
4243
0 commit comments