Day 10 cleanup
This commit is contained in:
parent
c3919a1e57
commit
4b2867b1c7
1 changed files with 13 additions and 32 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue