Skip to content

Instantly share code, notes, and snippets.

@saolsen
Last active December 11, 2022 18:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save saolsen/c8728c7b5baa4b00feb7aa199f326c6c to your computer and use it in GitHub Desktop.
Save saolsen/c8728c7b5baa4b00feb7aa199f326c6c to your computer and use it in GitHub Desktop.
aoc 2022 day10
enum Op {
Noop,
Addx(i32),
}
fn parse<'a>(input: &'a str) -> impl Iterator<Item = Op> + 'a {
input.split("\n").map(|line| {
let mut split = line.split(" ");
let op = split.next().unwrap();
match op {
"noop" => Op::Noop,
"addx" => {
let n = split.next().unwrap().parse::<i32>().unwrap();
Op::Addx(n)
}
_ => unimplemented!(),
}
})
}
fn main() {
let mut signal_sum = 0;
let mut ops = parse(include_str!("day10_input.txt"));
let mut x = 1;
let mut cycle = 0;
let mut add: Option<i32> = None;
loop {
cycle += 1;
// check values during cycle
// part 1
if (cycle - 20) % 40 == 0 {
let signal = cycle * x;
signal_sum += signal;
}
// part 2
let pixel: i32 = (cycle - 1) % 40;
if (x - pixel).abs() <= 1 {
print!("#");
} else {
print!(".");
}
if cycle % 40 == 0 {
println!();
}
if let Some(n) = add {
x += n;
add = None;
} else {
if let Some(op) = ops.next() {
match op {
Op::Noop => (),
Op::Addx(n) => {
add = Some(n);
}
}
} else {
break;
}
}
}
eprintln!("signal_sum: {signal_sum}");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment