Skip to content

Instantly share code, notes, and snippets.

@eugene70
Created December 31, 2021 12:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eugene70/5aefe5875944b72665b66542ff0db567 to your computer and use it in GitHub Desktop.
Save eugene70/5aefe5875944b72665b66542ff0db567 to your computer and use it in GitHub Desktop.
package aoc2021
import scala.annotation.tailrec
object Day02:
case class Move(direction: String, step: Int)
type InputType = IndexedSeq[Move]
@main def runDay02: Unit =
val testData = time("testReady", () => ready(testInput))
time("testPart1", () => part1(testData)) // should be 150
//time("testPart2", () => part2(testData)) // should be
val data = time("ready", () => ready(input))
time("part1", () => part1(data))
//time("part2", () => part2(data))
def ready(input: String): InputType =
input
.linesIterator
.map(_.split(" "))
.map(a => Move(a(0), a(1).toInt))
.toIndexedSeq
def part1(data: InputType): Int =
val map: Map[String, Int] = data
.groupMapReduce(_.direction)(_.step)(_ + _)
map.getOrElse("forward", 0) * (map.getOrElse("down", 0) - map.getOrElse("up", 0))
def part2(data: InputType): Int =
???
val testInput =
"""forward 5
|down 5
|forward 8
|up 3
|down 8
|forward 2""".stripMargin
val input =
"""forward 4
|forward 6
|down 8
|forward 3
|forward 9
|down 7
|down 7
|down 1
|forward 1
|forward 5
|up 4
|forward 3
|forward 9
|forward 5
|down 8
|forward 6
|forward 8
|up 4
|forward 1
|forward 4
|up 3
|down 2
|down 2
|up 8
|forward 9
|down 5
|down 6
|down 4
|forward 1
|forward 7
|down 1
|forward 2
|down 7
|down 6
|forward 3
|forward 1
|down 7
|forward 3
|up 7
|up 1
|forward 6
|down 8
|down 4
|down 1
|down 7
|forward 9
|down 2
|forward 9
|up 4
|down 7
|forward 9
|forward 9
|up 4
|up 7
|up 2
|forward 1
|down 9
|forward 2
|forward 8
|forward 5
|down 9
|forward 5
|up 1
|forward 8
|down 6
|down 1
|down 1
|down 8
|down 6
|down 4
|down 6
|forward 7
|forward 5
|forward 4
|up 8
|up 4
|forward 6
|forward 9
|forward 6
|down 2
|up 8
|forward 3
|forward 8
|down 5
|forward 1
|down 6
|down 7
|up 4
|down 8
|forward 6
|up 4
|forward 7
|down 8
|down 8
|down 2
|down 8
|up 7
|forward 7
|forward 6
|down 2
|forward 9
|down 7
|down 4
|forward 1
|up 9
|down 6
|up 7
|down 6
|down 2
|down 2
|forward 3
|down 8
|forward 4
|down 7
|down 2
|up 8
|down 6
|forward 2
|forward 2
|down 6
|up 6
|down 7
|up 5
|up 4
|up 9
|forward 9
|forward 7
|down 4
|down 4
|up 5
|down 2
|forward 3
|down 9
|down 5
|forward 8
|up 3
|forward 7
|forward 9
|down 3
|forward 1
|up 1
|forward 5
|down 8
|down 2
|forward 3
|down 6
|down 8
|up 9
|down 9
|forward 4
|up 5
|forward 8
|forward 7
|forward 7
|down 3
|down 5
|forward 8
|down 1
|down 2
|forward 2
|up 9
|down 3
|down 9
|forward 2
|down 4
|up 9
|up 3
|down 1
|down 1
|forward 6
|down 5
|down 9
|forward 2
|up 5
|forward 3
|down 1
|down 7
|forward 1
|forward 1
|down 7
|up 3
|up 1
|up 6
|forward 9
|up 1
|down 8
|down 5
|up 6
|up 2
|down 8
|forward 3
|forward 1
|down 7
|up 1
|down 9
|down 9
|up 8
|forward 4
|up 8
|forward 8
|down 5
|forward 5
|forward 2
|forward 1
|forward 5
|down 8
|forward 6
|forward 8
|down 5
|forward 8
|up 1
|up 9
|up 7
|down 5
|down 9
|up 4
|down 7
|up 8
|up 3
|forward 6
|down 9
|forward 4
|down 4
|forward 2
|forward 3
|down 4
|down 5
|down 3
|forward 9
|forward 5
|forward 9
|forward 4
|down 5
|down 7
|down 5
|forward 8
|up 5
|down 2
|forward 3
|forward 4
|down 5
|up 8
|forward 5
|down 2
|up 4
|down 5
|down 2
|forward 1
|up 3
|down 6
|down 8
|down 3
|forward 1
|up 5
|forward 1
|down 3
|forward 4
|down 6
|forward 8
|forward 4
|forward 1
|down 8
|down 2
|forward 8
|down 5
|forward 2
|forward 2
|down 9
|forward 1
|forward 8
|up 1
|forward 1
|down 1
|down 7
|down 4
|up 4
|down 3
|forward 1
|forward 9
|down 9
|up 6
|up 8
|down 2
|down 2
|down 3
|forward 2
|forward 9
|down 1
|up 9
|down 3
|down 9
|down 1
|down 7
|forward 9
|forward 7
|down 5
|down 2
|down 9
|down 2
|down 7
|up 7
|down 2
|up 3
|up 5
|forward 8
|up 7
|forward 1
|down 9
|down 9
|down 1
|forward 6
|down 7
|up 4
|up 4
|down 9
|up 5
|up 8
|down 3
|down 5
|forward 6
|up 3
|down 8
|down 5
|forward 9
|up 6
|forward 9
|forward 5
|up 6
|up 9
|down 2
|up 5
|forward 9
|down 1
|up 1
|down 9
|forward 4
|forward 4
|forward 8
|down 5
|down 3
|down 7
|forward 5
|down 6
|forward 3
|down 5
|down 5
|up 5
|forward 8
|forward 1
|forward 2
|forward 6
|up 1
|down 5
|down 4
|up 5
|forward 3
|forward 2
|forward 2
|forward 2
|forward 7
|forward 8
|down 2
|up 8
|forward 4
|down 4
|forward 7
|down 6
|down 7
|forward 5
|down 5
|forward 1
|down 8
|forward 6
|down 1
|forward 3
|up 3
|down 7
|down 2
|up 4
|down 3
|up 2
|up 8
|down 2
|forward 5
|forward 3
|down 9
|down 9
|up 2
|forward 6
|forward 9
|down 1
|forward 6
|down 4
|up 2
|down 7
|down 3
|down 3
|forward 2
|down 5
|down 9
|down 7
|forward 7
|forward 9
|up 8
|down 8
|down 3
|up 5
|down 9
|forward 8
|forward 8
|down 1
|forward 5
|forward 2
|forward 7
|down 9
|down 7
|forward 6
|up 9
|forward 3
|forward 5
|up 7
|down 9
|forward 9
|forward 4
|forward 5
|forward 9
|forward 8
|forward 1
|forward 2
|forward 8
|down 7
|forward 3
|up 2
|up 7
|forward 1
|forward 3
|forward 9
|up 3
|down 2
|forward 3
|forward 6
|forward 3
|forward 3
|forward 3
|forward 1
|forward 1
|up 5
|down 5
|up 5
|down 5
|down 5
|forward 8
|forward 1
|down 4
|forward 7
|down 6
|down 1
|down 2
|down 2
|down 6
|up 8
|forward 3
|forward 2
|up 8
|up 2
|forward 1
|forward 6
|forward 5
|forward 6
|forward 7
|down 8
|forward 1
|down 4
|forward 2
|up 4
|forward 4
|down 1
|forward 5
|down 7
|forward 7
|up 7
|forward 1
|down 2
|forward 8
|forward 5
|up 8
|up 8
|up 2
|down 9
|forward 2
|down 4
|down 3
|down 5
|down 5
|down 2
|up 5
|forward 6
|up 7
|forward 8
|up 7
|down 4
|forward 1
|down 3
|forward 2
|forward 1
|down 2
|up 7
|forward 5
|up 8
|up 1
|down 4
|forward 6
|down 4
|up 9
|forward 5
|down 2
|down 7
|down 7
|forward 4
|forward 4
|forward 9
|down 1
|forward 6
|forward 1
|up 9
|forward 4
|forward 4
|forward 8
|forward 3
|forward 4
|down 3
|up 5
|up 1
|forward 3
|down 6
|down 4
|down 2
|forward 3
|forward 8
|up 6
|up 3
|forward 8
|down 3
|down 6
|forward 1
|up 7
|down 4
|down 5
|up 7
|forward 3
|up 4
|forward 9
|forward 6
|down 3
|forward 4
|down 6
|forward 1
|forward 6
|forward 4
|forward 2
|forward 1
|forward 3
|forward 1
|down 1
|down 9
|down 5
|down 7
|down 4
|down 8
|up 1
|down 6
|down 1
|forward 4
|down 9
|up 9
|down 6
|forward 6
|forward 8
|up 7
|forward 4
|down 3
|forward 9
|forward 6
|forward 8
|down 1
|up 2
|down 2
|down 8
|forward 4
|down 9
|down 3
|forward 5
|down 9
|down 4
|up 5
|down 8
|down 4
|down 9
|up 4
|down 5
|down 7
|down 3
|up 1
|up 1
|down 4
|down 6
|forward 8
|down 8
|down 6
|forward 6
|forward 9
|forward 3
|forward 3
|down 2
|down 4
|forward 3
|up 5
|up 3
|down 5
|down 1
|forward 5
|forward 7
|forward 1
|forward 4
|forward 5
|forward 1
|down 7
|down 8
|up 9
|down 8
|down 5
|up 3
|down 5
|down 5
|forward 8
|down 2
|forward 7
|forward 7
|down 1
|forward 2
|forward 7
|forward 5
|down 6
|forward 5
|down 5
|forward 4
|down 8
|forward 7
|up 5
|forward 5
|down 7
|down 7
|up 4
|forward 8
|up 1
|forward 3
|forward 7
|down 2
|forward 1
|down 4
|up 8
|forward 3
|forward 1
|forward 6
|forward 3
|up 4
|forward 3
|down 3
|forward 7
|forward 9
|forward 8
|down 6
|down 8
|up 6
|down 9
|forward 7
|forward 1
|up 4
|forward 5
|forward 8
|down 7
|down 9
|up 6
|up 6
|forward 9
|down 1
|forward 8
|down 9
|down 5
|forward 6
|forward 1
|down 4
|forward 8
|down 9
|down 4
|forward 5
|forward 7
|forward 3
|down 2
|forward 6
|forward 3
|forward 8
|down 1
|down 5
|up 6
|down 2
|down 1
|up 3
|down 7
|up 1
|forward 8
|down 6
|down 6
|forward 8
|up 3
|forward 8
|up 3
|forward 3
|forward 7
|forward 1
|down 1
|up 5
|forward 5
|forward 9
|forward 5
|forward 1
|forward 4
|down 8
|forward 2
|up 3
|forward 3
|down 9
|forward 2
|forward 6
|forward 3
|up 8
|up 1
|down 6
|forward 3
|down 4
|down 5
|forward 6
|forward 9
|down 4
|down 9
|down 7
|down 1
|up 3
|up 6
|forward 4
|forward 5
|down 1
|forward 3
|up 5
|forward 7
|down 9
|forward 5
|down 5
|down 1
|down 1
|down 1
|up 8
|down 4
|down 9
|forward 5
|down 5
|up 5
|up 3
|forward 1
|forward 7
|down 2
|forward 6
|forward 5
|up 4
|up 4
|forward 1
|down 7
|down 8
|up 3
|down 3
|up 4
|forward 2
|up 4
|up 4
|forward 8
|forward 1
|forward 2
|forward 7
|down 6
|forward 8
|forward 9
|forward 6
|forward 9
|down 3
|up 3
|forward 5
|down 1
|forward 1
|forward 4
|forward 2
|down 6
|up 7
|forward 9
|down 2
|up 5
|forward 6
|down 9
|down 6
|down 8
|forward 2
|down 7
|forward 6
|down 8
|forward 3
|forward 7
|forward 6
|down 7
|down 6
|forward 5
|up 8
|forward 6
|down 1
|up 9
|forward 6
|down 6
|down 5
|down 6
|up 2
|down 3
|down 7
|down 3
|forward 4
|up 9
|up 2
|forward 1
|forward 7
|forward 7
|forward 9
|forward 8
|forward 7
|down 3
|forward 4
|forward 8
|down 9
|forward 2
|forward 2
|up 9
|up 7
|forward 2
|down 8
|down 3
|down 1
|forward 1
|forward 3
|down 2
|forward 7
|up 4
|down 7
|down 1
|forward 8
|forward 2
|up 1
|down 5
|forward 8
|up 5
|up 7
|forward 4
|forward 7
|up 4
|up 3
|forward 5
|forward 9
|forward 1
|forward 3
|down 9
|up 2
|forward 8
|down 3
|forward 3
|forward 2
|down 8
|down 2
|down 3
|forward 1
|up 7
|down 1
|forward 3
|forward 8
|down 3
|down 9
|up 1
|down 9
|up 7
|up 7
|forward 7
|forward 7
|up 8
|down 2
|down 7
|down 1
|forward 5
|forward 5
|forward 7
|down 8
|forward 5
|down 9
|down 8
|forward 3
|up 9
|forward 3
|up 6
|forward 7
|up 7
|forward 3
|forward 2
|down 1
|down 4
|forward 1
|forward 8
|up 5
|down 5
|up 1
|down 5
|up 1
|up 6
|forward 5
|forward 5
|down 3
|down 3
|forward 2
|up 3
|up 2
|down 6
|down 5
|down 1
|down 1
|up 6
|forward 2
|forward 2
|up 4
|up 6
|up 6
|down 8
|up 2
|forward 4
|down 3
|forward 3
|up 4
|down 5
|forward 6
|forward 7
|up 6
|down 3
|down 7
|up 4
|down 2
|up 2
|forward 1
|down 8
|down 1
|down 1
|up 9
|down 1
|down 1
|up 1
|forward 8
|forward 4
|down 4
|forward 1
|down 4
|up 7
|forward 7
|forward 3
|down 4
|forward 9
|forward 1
|down 3
|down 2
|forward 7
|up 1
|forward 3
|up 3
|down 3
|down 7
|up 3
|up 4
|forward 7
|down 2
|up 2
|down 9
|up 1
|forward 3
|up 8
|up 8
|down 8
|down 1
|up 8
|up 4
|down 6
|forward 8""".stripMargin
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment