11import kotlin.io.path.readLines
22
33
4-
54class Day06 : Day {
6- override fun partOne (filename : String , verbose : Boolean ): Long {
7- val lines = filename.asPath().readLines()
8- val numbers = lines.dropLast(1 )
9- .mapToArray { line ->
5+ override fun partOne (filename : String , verbose : Boolean ): Long =
6+ calculate(filename, verbose) { lines ->
7+ lines.mapToArray { line ->
108 Regex (""" \d+""" )
119 .findAll(line)
1210 .map { it.value.toLong() }
1311 .toList()
1412 .toTypedArray()
1513 }.rotate()
14+ }
15+
16+ override fun partTwo (filename : String , verbose : Boolean ): Long =
17+ calculate(filename, verbose) { lines ->
18+ val maxLength = lines.maxOf { it.length }
19+ lines.map { it.padEnd(maxLength) }
20+ .parseMatrix()
21+ .rotate()
22+ .fold(mutableListOf (mutableListOf<Long >())) { problems, chars ->
23+ val line = String (chars.toCharArray())
24+ if (line.isBlank()) {
25+ problems + = mutableListOf<Long >()
26+ } else {
27+ problems.last() + = line.trim().toLong()
28+ }
29+ problems
30+ }.mapToArray { it.toTypedArray() }
31+ }
32+
33+ private fun calculate (filename : String , verbose : Boolean , parseNumbers : (List <String >) -> Array <Array <Long >>): Long {
34+ val lines = filename.asPath().readLines()
35+ val numbers = parseNumbers(lines.dropLast(1 ))
1636
1737 val operators = lines.last()
1838 .let { line ->
@@ -38,10 +58,7 @@ class Day06 : Day {
3858 else -> throw IllegalArgumentException (" Unhandled operator" )
3959 }
4060 }
41- }
4261
43- override fun partTwo (filename : String , verbose : Boolean ): Any {
44- TODO (" Not yet implemented" )
4562 }
4663
4764 companion object : Day .Main (" Day06.txt" ) {
0 commit comments