diff --git a/aoc/resources/day2Input.txt b/aoc/resources/day2Input.txt new file mode 100644 index 0000000..d61291a --- /dev/null +++ b/aoc/resources/day2Input.txt @@ -0,0 +1,1000 @@ +forward 2 +down 9 +up 6 +forward 1 +down 5 +down 7 +down 9 +forward 9 +down 8 +up 7 +forward 2 +up 6 +forward 4 +down 5 +down 9 +up 1 +down 9 +forward 8 +forward 6 +forward 6 +forward 5 +forward 9 +up 3 +up 5 +forward 1 +down 4 +down 7 +forward 2 +up 3 +down 8 +forward 1 +down 2 +forward 3 +up 1 +up 1 +up 7 +forward 5 +up 8 +forward 8 +forward 8 +down 6 +forward 1 +forward 5 +forward 4 +forward 6 +forward 5 +down 6 +down 9 +forward 9 +down 8 +forward 6 +down 5 +forward 9 +up 3 +up 1 +down 8 +down 7 +down 9 +forward 7 +down 8 +down 9 +down 5 +down 3 +forward 1 +forward 6 +down 1 +forward 9 +down 5 +forward 7 +up 2 +down 8 +forward 1 +down 4 +down 9 +down 4 +up 5 +forward 4 +forward 6 +forward 1 +down 3 +forward 1 +down 6 +up 5 +up 4 +forward 6 +forward 1 +forward 1 +down 2 +up 4 +up 3 +up 2 +up 6 +down 6 +forward 1 +down 8 +forward 1 +up 6 +forward 7 +down 5 +forward 4 +forward 6 +down 4 +forward 4 +down 4 +down 4 +forward 2 +forward 8 +down 5 +down 1 +down 8 +up 5 +up 8 +down 5 +forward 4 +down 6 +up 7 +forward 2 +down 3 +forward 2 +forward 2 +down 9 +down 3 +up 6 +forward 8 +up 2 +up 9 +forward 4 +down 1 +down 5 +forward 4 +down 2 +down 3 +forward 5 +down 4 +forward 7 +up 4 +forward 6 +up 8 +forward 1 +up 9 +down 4 +forward 2 +down 1 +forward 7 +down 3 +down 2 +forward 5 +down 3 +down 9 +down 9 +up 5 +forward 2 +down 8 +up 9 +forward 4 +down 3 +forward 3 +forward 6 +up 2 +forward 3 +down 1 +down 1 +down 1 +forward 7 +forward 4 +forward 7 +down 5 +down 6 +down 2 +forward 6 +down 3 +up 6 +forward 4 +down 8 +up 1 +forward 8 +down 2 +down 5 +forward 4 +down 9 +forward 2 +forward 2 +down 3 +forward 3 +down 1 +forward 2 +down 7 +forward 3 +forward 9 +up 9 +forward 6 +forward 2 +down 1 +down 5 +forward 6 +forward 6 +down 3 +up 3 +forward 9 +down 7 +down 2 +down 4 +down 7 +forward 5 +up 4 +forward 8 +down 5 +forward 7 +down 7 +up 7 +down 8 +forward 9 +up 5 +forward 1 +down 2 +forward 5 +down 9 +forward 3 +down 5 +forward 8 +forward 3 +up 5 +down 2 +up 3 +forward 2 +up 1 +up 5 +down 8 +forward 2 +down 5 +up 4 +up 5 +up 2 +forward 9 +forward 6 +down 9 +up 9 +forward 6 +forward 4 +forward 3 +forward 7 +up 1 +down 2 +down 6 +down 1 +forward 8 +down 1 +forward 6 +down 8 +forward 8 +down 7 +down 6 +down 5 +forward 2 +up 8 +up 6 +up 5 +down 1 +forward 1 +down 1 +down 5 +forward 7 +forward 3 +down 1 +forward 5 +forward 5 +forward 8 +down 1 +up 2 +down 6 +up 6 +forward 6 +forward 6 +down 3 +forward 9 +up 4 +forward 4 +down 6 +up 1 +forward 6 +down 2 +down 5 +down 2 +down 6 +up 5 +down 1 +down 1 +forward 3 +forward 7 +forward 3 +up 2 +down 8 +down 4 +down 1 +down 5 +down 1 +down 9 +forward 6 +down 6 +down 4 +down 6 +down 8 +forward 4 +down 6 +down 7 +forward 8 +down 4 +up 4 +down 1 +forward 1 +forward 4 +forward 1 +up 9 +down 7 +forward 7 +down 4 +forward 1 +up 4 +forward 4 +down 5 +down 7 +forward 5 +forward 7 +forward 1 +forward 1 +forward 9 +forward 9 +up 3 +forward 4 +down 2 +forward 9 +up 8 +forward 3 +up 5 +down 3 +down 8 +forward 8 +down 6 +forward 1 +down 6 +down 6 +up 9 +down 2 +forward 8 +up 9 +down 7 +up 9 +up 8 +up 1 +forward 6 +forward 9 +down 2 +forward 8 +down 1 +up 4 +forward 4 +forward 7 +up 2 +forward 4 +down 5 +forward 3 +down 2 +down 7 +down 4 +down 2 +up 5 +down 5 +down 5 +down 4 +up 1 +forward 7 +down 6 +forward 5 +forward 1 +down 4 +up 9 +down 5 +forward 7 +forward 5 +down 6 +down 3 +down 9 +down 1 +forward 6 +up 2 +down 7 +down 3 +down 6 +up 3 +down 4 +down 4 +forward 9 +down 3 +forward 2 +down 9 +down 8 +up 4 +down 2 +forward 2 +down 5 +down 4 +down 4 +down 2 +forward 6 +down 3 +forward 1 +down 4 +forward 7 +down 5 +up 4 +down 6 +forward 8 +down 6 +forward 2 +forward 4 +forward 5 +forward 7 +forward 4 +forward 5 +down 8 +down 7 +forward 3 +forward 5 +up 7 +forward 1 +down 4 +forward 5 +forward 4 +forward 4 +down 5 +down 8 +forward 8 +down 1 +down 1 +down 5 +up 5 +forward 6 +down 6 +forward 3 +forward 4 +forward 7 +forward 4 +down 8 +forward 2 +down 4 +forward 4 +down 1 +up 2 +forward 6 +up 1 +down 7 +down 9 +forward 7 +forward 2 +up 3 +down 2 +down 9 +down 5 +up 7 +forward 1 +forward 8 +down 8 +up 3 +down 3 +forward 9 +up 4 +down 5 +up 5 +down 1 +up 8 +forward 9 +down 3 +up 6 +forward 6 +forward 1 +down 1 +forward 9 +down 8 +forward 8 +down 6 +up 9 +down 4 +up 3 +up 9 +forward 2 +down 2 +down 2 +forward 3 +down 2 +forward 5 +forward 4 +up 8 +forward 9 +up 7 +forward 2 +down 5 +down 6 +forward 8 +up 7 +forward 4 +forward 3 +up 5 +down 8 +forward 3 +up 2 +down 3 +forward 6 +down 9 +down 2 +down 6 +down 2 +forward 7 +forward 5 +forward 7 +down 8 +forward 2 +down 2 +forward 8 +up 8 +forward 4 +forward 3 +up 5 +down 3 +forward 3 +up 8 +up 7 +down 4 +down 1 +forward 2 +down 1 +up 6 +up 4 +down 3 +up 1 +forward 7 +forward 7 +forward 7 +forward 8 +down 1 +forward 5 +down 6 +forward 9 +forward 7 +forward 7 +down 4 +up 4 +down 6 +down 9 +up 4 +up 2 +up 6 +forward 4 +up 4 +up 6 +down 2 +forward 4 +down 9 +forward 9 +forward 9 +down 1 +forward 7 +down 2 +down 7 +down 8 +down 8 +down 9 +up 9 +down 5 +forward 5 +forward 7 +forward 4 +down 7 +forward 8 +forward 1 +down 8 +up 9 +down 7 +forward 9 +forward 4 +forward 8 +down 9 +forward 4 +down 3 +forward 3 +down 1 +down 1 +down 2 +up 5 +down 2 +down 1 +down 8 +forward 3 +up 2 +forward 7 +down 3 +down 8 +down 1 +forward 4 +forward 7 +down 5 +forward 6 +down 6 +down 2 +forward 6 +down 3 +up 4 +down 7 +forward 7 +up 1 +up 9 +down 1 +down 2 +down 8 +down 7 +up 1 +forward 7 +down 2 +forward 4 +forward 6 +forward 9 +down 6 +forward 2 +up 8 +down 2 +up 2 +up 5 +down 8 +up 6 +down 9 +forward 6 +down 8 +down 6 +down 1 +up 7 +up 6 +down 8 +forward 2 +up 7 +forward 5 +forward 7 +forward 7 +up 5 +forward 2 +down 9 +up 2 +up 8 +up 2 +down 3 +down 7 +forward 9 +down 3 +up 9 +forward 8 +up 8 +forward 4 +forward 8 +forward 6 +up 1 +down 3 +up 1 +down 1 +forward 2 +forward 1 +forward 4 +forward 7 +up 8 +down 9 +up 2 +down 7 +forward 4 +down 3 +forward 4 +forward 2 +down 9 +forward 8 +forward 5 +forward 3 +down 6 +forward 4 +forward 4 +forward 9 +forward 4 +up 5 +down 7 +up 6 +forward 5 +down 5 +forward 4 +down 5 +forward 7 +forward 3 +forward 5 +down 5 +forward 4 +down 5 +up 4 +down 8 +up 3 +down 3 +up 5 +forward 4 +forward 5 +down 6 +forward 6 +forward 1 +forward 8 +down 6 +down 9 +up 5 +forward 2 +forward 8 +up 6 +down 6 +forward 2 +down 8 +forward 7 +forward 7 +down 5 +forward 5 +forward 8 +forward 1 +down 4 +down 2 +down 5 +up 4 +forward 3 +forward 5 +down 4 +down 7 +down 4 +up 9 +up 6 +forward 1 +down 8 +up 8 +up 9 +forward 2 +forward 1 +down 6 +forward 6 +down 4 +forward 7 +up 2 +up 1 +forward 4 +down 1 +forward 8 +forward 3 +up 7 +up 5 +down 1 +forward 8 +forward 6 +up 6 +forward 9 +down 5 +down 9 +forward 2 +down 3 +up 1 +up 7 +down 1 +forward 8 +up 9 +down 1 +down 5 +down 7 +down 5 +down 5 +down 5 +up 9 +forward 9 +forward 7 +forward 4 +forward 6 +down 5 +down 3 +forward 9 +forward 1 +down 1 +down 8 +up 4 +down 9 +forward 9 +up 1 +down 5 +forward 8 +up 6 +forward 3 +down 6 +up 8 +down 7 +forward 3 +forward 6 +down 7 +forward 6 +forward 4 +forward 4 +down 4 +forward 6 +forward 5 +down 6 +forward 6 +down 7 +forward 6 +forward 3 +up 4 +up 2 +up 6 +down 2 +down 8 +forward 5 +forward 1 +up 4 +forward 7 +forward 9 +up 6 +down 7 +down 3 +up 5 +forward 5 +down 8 +up 1 +down 1 +down 3 +down 2 +down 1 +forward 5 +down 3 +down 5 +forward 7 +forward 9 +down 3 +forward 7 +forward 5 +forward 4 +forward 2 +forward 7 +forward 8 +forward 6 +down 8 +forward 5 +forward 6 +forward 6 +down 8 +down 2 +forward 4 +down 7 +forward 6 +down 7 +down 4 +forward 6 +up 6 +forward 4 +forward 9 +forward 2 +forward 3 +forward 1 +down 8 +down 3 +forward 4 +up 3 +forward 7 +forward 1 +down 7 +down 8 +forward 1 +up 8 +forward 8 +up 8 +down 5 +forward 6 +down 8 +down 4 +down 9 +up 1 +down 3 +forward 6 +down 6 +forward 7 +forward 3 +down 6 +down 6 +forward 4 +down 4 +down 1 +down 8 +forward 2 +forward 8 +forward 8 +down 6 +forward 9 +down 9 +down 5 +down 5 +forward 7 +down 1 +forward 1 +down 1 +down 6 +down 1 +forward 1 +up 6 +up 9 +forward 5 +down 6 +forward 8 +forward 6 +down 7 +forward 1 +forward 4 +forward 9 +forward 2 +forward 4 +down 2 +forward 1 +forward 8 +down 1 +down 1 +forward 4 +down 5 +down 3 +down 9 +down 2 +up 8 +down 7 +down 1 +down 9 +forward 2 +forward 2 +up 3 +forward 3 +down 3 +forward 5 +forward 9 +down 7 +up 7 +down 9 +forward 3 +forward 7 +down 1 +forward 8 +down 8 +forward 1 +down 8 +down 6 +forward 2 +down 3 +down 1 +down 8 +forward 3 +up 5 +down 7 +up 2 +up 8 +forward 5 +up 7 +down 6 +up 7 +down 9 +forward 5 +up 4 +forward 9 +down 5 +up 7 +down 2 +up 2 +up 7 +forward 5 +down 6 +forward 4 +down 4 +down 3 +forward 2 +up 2 +down 5 +forward 8 +down 3 +up 7 +down 1 +down 7 +forward 7 +forward 4 +forward 7 +down 2 +down 9 +down 6 +down 9 +down 2 +down 9 +down 7 +down 5 +forward 4 +up 5 +up 7 +forward 2 +forward 7 +down 3 +down 3 +forward 4 diff --git a/aoc/src/Day2.scala b/aoc/src/Day2.scala new file mode 100644 index 0000000..43c0185 --- /dev/null +++ b/aoc/src/Day2.scala @@ -0,0 +1,54 @@ +import scala.io.Source +object Day2 extends App: + enum Move: + case Forward(distance: Int) extends Move + case Down(distance: Int) extends Move + case Up(distance: Int) extends Move + + import Move._ + + val moves = Source + .fromURL(getClass.getResource("day2Input.txt")) + .mkString + .split('\n') + .toList + .map(_.split(' ')) + .map { + case Array("forward", distance) => Forward(distance.toInt) + case Array("down", distance) => Down(distance.toInt) + case Array("up", distance) => Up(distance.toInt) + } + + case class SimplePosition(horizontal: Int, depth: Int) { + def performMove(move: Move): SimplePosition = move match { + case Forward(distance) => + SimplePosition(horizontal + distance, depth) + case Up(distance) => + SimplePosition(horizontal, depth - distance) + case Down(distance) => + SimplePosition(horizontal, depth + distance) + } + } + + val finalPositionPart1 = + moves.foldLeft(SimplePosition(0, 0))(_.performMove(_)) + println( + s"Part 1: ${finalPositionPart1.depth * finalPositionPart1.horizontal}" + ) + + case class BetterPosition(aim: Int, horizontal: Int, depth: Int) { + def performMove(move: Move): BetterPosition = move match { + case Forward(distance) => + BetterPosition(aim, horizontal + distance, depth + aim * distance) + case Up(distance) => + this.copy(aim - distance) + case Down(distance) => + this.copy(aim + distance) + } + } + + val finalPositionPart2 = + moves.foldLeft(BetterPosition(0, 0, 0))(_.performMove(_)) + println( + s"Part 2: ${finalPositionPart2.depth * finalPositionPart2.horizontal}" + )