Day 2
This commit is contained in:
parent
57918f09c3
commit
b0c1df3eb3
2 changed files with 1054 additions and 0 deletions
1000
aoc/resources/day2Input.txt
Normal file
1000
aoc/resources/day2Input.txt
Normal file
File diff suppressed because it is too large
Load diff
54
aoc/src/Day2.scala
Normal file
54
aoc/src/Day2.scala
Normal file
|
|
@ -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}"
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue