-
Notifications
You must be signed in to change notification settings - Fork 3
/
Day06.scala
20 lines (16 loc) · 851 Bytes
/
Day06.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package AdventOfCode2019
object Day06:
def parse(input: Seq[String]): Map[String, List[String]] =
val parent = input.map(_.split("\\)")).map(a => a(1) -> a(0)).toMap
val cache = collection.mutable.Map("COM" -> List("COM"))
def orbit(planet: String): List[String] = cache.getOrElseUpdate(planet, planet :: orbit(parent(planet)))
parent.map((planet, _) => planet -> orbit(planet))
def part1(input: Seq[String]): Int = parse(input).values.map(_.tail.size).sum
def part2(input: Seq[String]): Int =
val orbits = parse(input)
val (you, san) = (orbits("YOU"), orbits("SAN"))
you.tail.indexWhere(san.contains) + san.tail.indexWhere(you.contains)
def main(args: Array[String]): Unit =
val data = io.Source.fromResource("AdventOfCode2019/Day06.txt").getLines().toSeq
println(part1(data))
println(part2(data))