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