1+ import kotlin.io.path.readLines
2+
13class Day03 : Day {
2- override fun partOne (filename : String , verbose : Boolean ): Any {
3- val banks = filename.asPath().parseMatrix ()
4+ override fun partOne (filename : String , verbose : Boolean ): Long {
5+ val banks = filename.asPath().readLines ()
46 val maxJoltage = banks.map { bank ->
5- bank.foldIndexed(0L ) { index, acc, current ->
6- if (index < bank.lastIndex) {
7- bank.drop(index + 1 ).fold(acc) { acc, next ->
8- maxOf(acc, " $current$next " .toLong())
9- }
10- } else {
11- acc
12- }
7+ bank.maxJoltages(2 ).toLong()
8+ }
9+ if (verbose) {
10+ maxJoltage.forEach {
11+ println (it)
1312 }
1413 }
14+ return maxJoltage.sum()
15+ }
16+
17+ override fun partTwo (filename : String , verbose : Boolean ): Long {
18+ val banks = filename.asPath().readLines()
19+ val maxJoltage = banks.map { bank ->
20+ bank.maxJoltages(12 ).toLong()
21+ }
1522 if (verbose) {
1623 maxJoltage.forEach {
1724 println (it)
@@ -20,8 +27,22 @@ class Day03 : Day {
2027 return maxJoltage.sum()
2128 }
2229
23- override fun partTwo (filename : String , verbose : Boolean ): Any {
24- TODO (" Not yet implemented" )
30+ private fun String.maxJoltages (numberOfBatteries : Int ): String {
31+ if (numberOfBatteries == 0 ) {
32+ return " "
33+ }
34+ if (length == numberOfBatteries) {
35+ return this
36+ }
37+ var maxValue = ' 0'
38+ var indexOfFirstMax = - 1
39+ substring(0 , length - numberOfBatteries + 1 ).forEachIndexed { index, bank ->
40+ if (bank > maxValue) {
41+ maxValue = bank
42+ indexOfFirstMax = index
43+ }
44+ }
45+ return maxValue.toString() + substring(indexOfFirstMax + 1 ).maxJoltages(numberOfBatteries - 1 )
2546 }
2647
2748 companion object : Day .Main (" Day03.txt" ) {
0 commit comments