Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import scala.io.Source
- object day9 extends App {
- def decompressedLength(xs: List[Char], v2: Boolean): Long = {
- def getMarker(xs: List[Char]): (Int, Int, Int) = {
- val clause = xs.mkString.split(')').head
- val Array(a, b) = clause split 'x' map (_.toInt)
- (a, b, clause.length + 1)
- }
- def accumulator(xs: List[Char], acc: Long): Long = xs match {
- case Nil => acc
- case '(' :: t =>
- val marker = getMarker(t)
- val (content, remainder) = t drop marker._3 splitAt marker._1
- val scope: Long =
- if (v2) accumulator(content, 0)
- else content.length
- accumulator(remainder, acc + marker._2 * scope)
- case _ :: t => accumulator(t, acc + 1)
- }
- accumulator(xs, 0)
- }
- val input = Source.fromFile("day9.txt").getLines.mkString.replaceAll("\\s", "").toList
- println(decompressedLength(input, v2 = false))
- println(decompressedLength(input, v2 = true))
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement