todd.ginsberg
12/20/2018, 8:04 PMPoint
class that I just reused.
class Day20(rawInput: String) {
private val grid: Map<Point, Int> = parseGrid(rawInput)
fun solvePart1(): Int =
grid.maxBy { it.value }!!.value
fun solvePart2(): Int =
grid.count { it.value >= 1000 }
private fun parseGrid(input: String): Map<Point, Int> {
val grid = mutableMapOf(startingPoint to 0)
val stack = ArrayDeque<Point>()
var current = startingPoint
input.forEach {
when (it) {
'(' -> stack.push(current)
')' -> current = stack.pop()
'|' -> current = stack.peek()
in movementRules -> {
// If we are moving to a spot we haven't seen before, we can
// record this as a new distance.
val nextDistance = grid.getValue(current) + 1
current = movementRules.getValue(it).invoke(current)
if (current !in grid) grid[current] = nextDistance
}
}
}
return grid
}
companion object {
private val startingPoint = Point(0, 0)
private val movementRules = mapOf(
'N' to Point::up,
'S' to Point::down,
'E' to Point::right,
'W' to Point::left
)
}
}
karelpeeters
12/21/2018, 12:31 AME(N|S)E
you get 2
for part one, but I think that needs to be 3
, right?todd.ginsberg
12/21/2018, 12:48 AMkarelpeeters
12/21/2018, 12:48 AMkarelpeeters
12/21/2018, 12:49 AMfun main(args: Array<String>) {
println(3574)
println(8444)
}
todd.ginsberg
12/21/2018, 12:49 AMkarelpeeters
12/21/2018, 12:50 AMtodd.ginsberg
12/21/2018, 12:56 AM