From 4b2867b1c71d7a4d646bc56be51210e9ef3535a0 Mon Sep 17 00:00:00 2001 From: Paul-Henri Froidmont Date: Sat, 10 Dec 2022 07:39:52 +0100 Subject: [PATCH] Day 10 cleanup --- aoc/src/Day10.scala | 45 +++++++++++++-------------------------------- 1 file changed, 13 insertions(+), 32 deletions(-) diff --git a/aoc/src/Day10.scala b/aoc/src/Day10.scala index 315fb72..39d1ea9 100644 --- a/aoc/src/Day10.scala +++ b/aoc/src/Day10.scala @@ -6,44 +6,25 @@ object Day10 extends App: .fromURL(getClass.getResource("day10Input.txt")) .mkString .split('\n') - .toList - .map(_.split(" ")).map { - case Array(inst, value) => (inst, value.toInt) - case Array(inst) => (inst, 0) - } + .map(_.split(" ")) .flatMap { - case inst @ ("noop", _) => List(inst) - case inst @ ("addx", _) => List(("noop", 0), inst) + case Array("addx", value) => List(0, value.toInt) + case Array("noop") => List(0) } - val execution = input.scanLeft((1, 1)) { - case ((register, cycle), ("noop", _)) => (register, cycle + 1) - case ((register, cycle), ("addx", value)) => (register + value, cycle + 1) - case ((register, cycle), _) => (register, cycle + 1) - } + val registerStates = input.scan(1)(_ + _) - val interestingSignals = - (20 to execution.last._2).filter(cycle => cycle == 20 || (cycle + 20) % 40 == 0) - - val part1 = execution - .filter(state => interestingSignals.contains(state._2)) - .map(_._1) - .zip(interestingSignals) - .map(_ * _) - .sum + val part1 = (20 to 220 by 40).map(s => registerStates(s - 1) * s).sum println(s"Part 1: $part1") - def renderRow(rowExecution: List[(Int, Int)]): String = - rowExecution.foldLeft("") { case (line, (register, cycle)) => - val spritePosition = register - 1 to register + 1 - if spritePosition.contains((cycle - 1) % 40) then line + "#" - else line + "." - } - - val part2 = execution + val part2 = registerStates .grouped(40) - .map(renderRow) + .map( + _.zip(0 to 39) + .map((reg, cycle) => Math.abs(reg - cycle) <= 1) + .map(if _ then "#" else ".") + .mkString + ) .mkString("\n") - println(s"Part 2:") + println("Part 2:") println(part2) -end Day10