23 lines
597 B
Scala
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
|