1
0
This commit is contained in:
2020-12-12 07:16:04 +01:00
parent b7ba2d10a7
commit 582f4f4b50
2 changed files with 858 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
package be.vandewalleh.aoc.days
import be.vandewalleh.aoc.utils.input.Day
import be.vandewalleh.aoc.utils.input.Input
import be.vandewalleh.aoc.utils.input.Lines
import be.vandewalleh.aoc.utils.input.createDay
import kotlin.math.abs
@Day(12)
class Day12(@Lines val input: Input<List<String>>) {
fun part1(): Int {
var x = 0
var y = 0
var facing = "E"
val dirs = listOf("N", "E", "S", "W")
input.value.forEach {
val dir = it.take(1)
val steps = it.drop(1).toInt()
when (dir) {
"L" -> repeat(steps / 90) {
val i = (dirs.indexOf(facing) + 4 - 1) % 4
facing = dirs[i]
}
"R" -> repeat(steps / 90) {
val i = (dirs.indexOf(facing) + 1) % 4
facing = dirs[i]
}
}
when (if (dir == "F") facing else dir) {
"N" -> y -= steps
"S" -> y += steps
"W" -> x -= steps
"E" -> x += steps
}
}
return abs(x) + abs(y)
}
fun part2(): Int {
var x = 0
var y = 0
var waypointX = 10
var waypointY = -1
input.value.forEach {
val dir = it.take(1)
val steps = it.drop(1).toInt()
when (dir) {
"L" -> repeat(steps / 90) {
val oldY = waypointY
waypointY = -waypointX
waypointX = oldY
}
"R" -> repeat(steps / 90) {
val oldY = waypointY
waypointY = waypointX
waypointX = -oldY
}
}
when (dir) {
"F" -> {
x += waypointX * steps
y += waypointY * steps
}
"N" -> waypointY -= steps
"S" -> waypointY += steps
"W" -> waypointX -= steps
"E" -> waypointX += steps
}
}
return abs(x) + abs(y)
}
}
fun main() = with(createDay<Day12>()) {
println(part1())
println(part2())
}