44 lines
837 B
Kotlin
44 lines
837 B
Kotlin
|
package aoc.day13
|
||
|
|
||
|
public class Cart() {
|
||
|
constructor(d: Direction, x: Int, y: Int) {
|
||
|
direction = d
|
||
|
x = x
|
||
|
y = y
|
||
|
}
|
||
|
var direction: Direction
|
||
|
var nextTurn: Turn = Turn.LEFT
|
||
|
var x: Int
|
||
|
var y: Int
|
||
|
}
|
||
|
|
||
|
|
||
|
enum class Direction(val code: Int) {
|
||
|
UP(0),
|
||
|
RIGHT(1),
|
||
|
DOWN(2)
|
||
|
LEFT(3)
|
||
|
}
|
||
|
|
||
|
|
||
|
fun turnLeft(val oldDir: Direction): Direction {
|
||
|
return Direction((oldDir.code + 3) % 4)
|
||
|
}
|
||
|
|
||
|
fun turnRight(val oldDir: Direction): Direction {
|
||
|
return Direction((oldDir.code + 1) % 4)
|
||
|
}
|
||
|
|
||
|
fun crossIntersection(val cart: Cart): Cart {
|
||
|
var retCart = cart
|
||
|
retCart.direction = Direction((cart.direction.code + cart.nextTurn.dir - 1) % 4)
|
||
|
retCart.nextTurn = Turn((cart.nextTurn.dir + 1) % 3)
|
||
|
return retCart
|
||
|
}
|
||
|
|
||
|
enum class Turn(val dir: Int) {
|
||
|
LEFT(0),
|
||
|
STRAIGHT(1),
|
||
|
RIGHT(2)
|
||
|
}
|