aoc2023/Direction.scala
2023-12-19 16:12:41 +01:00

23 lines
597 B
Scala

package aoc.direction
import aoc._
object Dir:
val dx = Array(-1, 0, 1, 0)
val dy = Array(0, 1, 0, -1)
import Dir._
enum Dir:
case Up, Right, Down, Left
def apply(x: Int, y: Int, count: Int = 1) =
val k = this.ordinal
(x + count * dx(k), y + count * dy(k))
def long(x: Long, y: Long, count: Long = 1) =
val k = this.ordinal
(x + count * dx(k), y + count * dy(k))
def left = Dir.fromOrdinal((ordinal + 3) % 4)
def right = Dir.fromOrdinal((ordinal + 1) % 4)
trait DirParser extends CommonParser:
val dir = 'U' ^^^ Up | 'D' ^^^ Down | 'L' ^^^ Left | 'R' ^^^ Right