Last active
December 11, 2022 18:49
-
-
Save saolsen/c8728c7b5baa4b00feb7aa199f326c6c to your computer and use it in GitHub Desktop.
aoc 2022 day10
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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