Day 5: Added timings and compared to a naive "String.substring" implementation
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user