1
0
Fork 0

Solve day 10

This commit is contained in:
Lars Martens 2022-12-10 10:47:56 +01:00
parent ce99b571c0
commit 4f7ed8d228
Signed by: haselkern
GPG key ID: B5CF1F363C179AD4
3 changed files with 372 additions and 0 deletions

140
input/10 Normal file
View file

@ -0,0 +1,140 @@
addx 1
addx 4
addx 21
addx -20
addx 4
noop
noop
addx 5
addx 3
noop
addx 2
addx 1
noop
noop
addx 4
noop
noop
noop
addx 3
addx 5
addx 2
addx 1
noop
addx -37
addx 22
addx -4
addx -14
addx 2
addx 5
addx 3
addx -2
addx 2
addx 5
addx 2
addx -15
addx 32
addx -14
addx 5
addx 2
addx 3
noop
addx -13
addx -2
addx 18
addx -36
noop
addx 11
addx -7
noop
noop
addx 6
addx 22
addx -21
addx 3
addx 2
addx 4
noop
noop
noop
addx 5
addx -16
addx 17
addx 2
addx 5
addx -11
addx 15
addx -15
addx -24
noop
noop
addx 7
addx 2
addx -6
addx 9
noop
addx 5
noop
addx -3
addx 4
addx 2
noop
noop
addx 7
noop
noop
noop
addx 5
addx -28
addx 29
noop
addx 3
addx -7
addx -29
noop
addx 7
addx -2
addx 2
addx 5
addx 2
addx -3
addx 4
addx 5
addx 2
addx 8
addx -30
addx 25
addx 7
noop
noop
addx 3
addx -2
addx 2
addx -10
addx -24
addx 2
noop
noop
addx 2
noop
addx 3
addx 2
noop
addx 3
addx 2
addx 5
addx 2
noop
addx 1
noop
addx 2
addx 8
noop
noop
addx -1
addx -9
addx 14
noop
addx 1
noop
noop

146
input/10-test Normal file
View file

@ -0,0 +1,146 @@
addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop

86
src/bin/10.rs Normal file
View file

@ -0,0 +1,86 @@
use aoc2022::*;
use itertools::Itertools;
const INPUT: &str = include_str!("../../input/10");
fn main() {
let solution: i64 = Cpu::load(input())
.filter(|(cycle, _x)| [20, 60, 100, 140, 180, 220].contains(cycle))
.map(|(cycle, x)| cycle * x)
.sum();
solved_level_1(solution);
Cpu::load(input()).for_each(|(cycle, x)| {
let screen_x = (cycle - 1) % 40;
if screen_x.abs_diff(x) <= 1 {
print!("");
} else {
print!(" ");
}
if screen_x == 39 {
println!();
}
});
}
struct Cpu {
x: i64,
instruction_stack: Vec<Instruction>,
cycle: i64,
}
impl Cpu {
fn load<I>(it: I) -> Self
where
I: IntoIterator<Item = Instruction>,
{
let mut instructions = it.into_iter().collect_vec();
instructions.reverse();
Self {
x: 1,
instruction_stack: instructions,
cycle: 0,
}
}
}
impl Iterator for Cpu {
type Item = (i64, i64);
fn next(&mut self) -> Option<Self::Item> {
self.cycle += 1;
let Some(op) = self.instruction_stack.pop() else {
return None;
};
let result = (self.cycle, self.x);
match op {
Instruction::Nop => {}
Instruction::AddX(n) => self.instruction_stack.push(Instruction::DoAddX(n)),
Instruction::DoAddX(n) => self.x += n,
}
Some(result)
}
}
enum Instruction {
Nop,
AddX(i64),
DoAddX(i64),
}
fn input() -> impl Iterator<Item = Instruction> {
INPUT.lines().map(|line| {
if line.starts_with("addx") {
let n = line.split(' ').nth(1).unwrap();
Instruction::AddX(n.parse().unwrap())
} else {
Instruction::Nop
}
})
}