diff --git a/aoc/src/dev/ctsk/aoc/Grid.scala b/aoc/src/dev/ctsk/aoc/Grid.scala index ab91789..aa3004f 100644 --- a/aoc/src/dev/ctsk/aoc/Grid.scala +++ b/aoc/src/dev/ctsk/aoc/Grid.scala @@ -4,6 +4,7 @@ case class Point(x: Int, y: Int): def +(o: Point): Point = Point(x + o.x, y + o.y) def -(o: Point): Point = Point(x - o.x, y - o.y) def *(n: Int): Point = Point(n * x, n * y) + def reduce: Point = { val g = gcd(x.abs, y.abs); Point(x / g, y / g) } enum Direction: case Up, Right, Down, Left diff --git a/aoc/src/dev/ctsk/aoc/Utils.scala b/aoc/src/dev/ctsk/aoc/Utils.scala index db08e0a..46fcedb 100644 --- a/aoc/src/dev/ctsk/aoc/Utils.scala +++ b/aoc/src/dev/ctsk/aoc/Utils.scala @@ -1,3 +1,4 @@ package dev.ctsk.aoc - +def gcd(a: Int, b: Int): Int = + if b == 0 then a else gcd(b, a % b) diff --git a/aoc/src/dev/ctsk/aoc/days/Day08.scala b/aoc/src/dev/ctsk/aoc/days/Day08.scala index 0890042..73d1e22 100644 --- a/aoc/src/dev/ctsk/aoc/days/Day08.scala +++ b/aoc/src/dev/ctsk/aoc/days/Day08.scala @@ -16,7 +16,7 @@ object Day08 extends Solver(8): def antinodes(a: Point, b: Point): Iterator[Point] = def it(a: Point, b: Point) = - Iterator.iterate(a)(_ + a - b).takeWhile(grid.contains) + Iterator.iterate(a)(_ + (a - b).reduce).takeWhile(grid.contains) it(a, b) ++ it(b, a) def part1: Int =