Skip to content

Commit 3795574

Browse files
committed
Day03 - Part 2
1 parent ad89501 commit 3795574

File tree

1 file changed

+33
-12
lines changed

1 file changed

+33
-12
lines changed

src/main/kotlin/Day03.kt

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,24 @@
1+
import kotlin.io.path.readLines
2+
13
class 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

Comments
 (0)