Day 5: Added timings and compared to a naive "String.substring" implementation

This commit is contained in:
2018-12-05 13:02:49 +01:00
parent 1eb6f41849
commit c6066c42ed

View File

@@ -6,9 +6,12 @@ import kotlin.system.measureTimeMillis
fun main() { fun main() {
val day = Day5() val day = Day5()
println("Puzzle 1 time: " + measureTimeMillis { day.puzzle1() } + " ms") println("Puzzle 1 linked list time: " + measureTimeMillis { day.puzzle1() } + " ms")
println("Puzzle 2 time: " + measureTimeMillis { day.puzzle2() } + " ms") println("Puzzle 2 linked list time: " + measureTimeMillis { day.puzzle2() } + " ms")
val dayNaive = Day5Substring()
println("Puzzle 1 substring time: " + measureTimeMillis { dayNaive.puzzle1() } + " ms")
println("Puzzle 2 substring time: " + measureTimeMillis { dayNaive.puzzle2() } + " ms")
} }
class Day5 { class Day5 {
@@ -123,4 +126,38 @@ class Day5 {
return "" + char return "" + char
} }
} }
}
class Day5Substring {
fun puzzle1() {
println(react(lines("/day/5/input.txt").findFirst().get()).length)
}
fun puzzle2() {
val fullPolymerString = lines("/day/5/input.txt").findFirst().get()
println(fullPolymerString.chars()
.distinct().boxed()
.map { it.toChar() }.map { it.toString() }
.map { it.toUpperCase() }
.distinct()
.mapToInt { react(fullPolymerString.replace(it.toString(), "", true)).length }
.min()!!)
}
fun react(polymer: String): String {
var curPolymer = polymer
var i = 0
while(i < curPolymer.length - 1) {
if (reactsWith(curPolymer[i], curPolymer[i + 1])) {
curPolymer = curPolymer.substring(0, i) + curPolymer.substring(i + 2)
i = if (i == 0) -1 else i - 2
}
i++
}
return curPolymer
}
fun reactsWith(char1: Char, char2: Char): Boolean = abs(char1.minus(char2)) == 32
} }