diff --git a/src/main.rs b/src/main.rs index 2793b0e..6393d02 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,6 +8,7 @@ const INPUTS: [&[u8]; 2] = [ #[derive(Debug)] enum Ins { + Null, Noop, Addx(i32), } @@ -17,7 +18,7 @@ fn parse(input: &[u8]) -> Vec { .split(|&c| c == b'\n') .filter(|c| !c.is_empty()) .flat_map(|line| match &line[0..4] { - [b'n', b'o', b'o', b'p'] => vec![Ins::Noop], + [b'n', b'o', b'o', b'p'] => [Ins::Noop, Ins::Null], [b'a', b'd', b'd', b'x'] => { let is_neg = line[5] == b'-'; let b: i32 = line[5..] @@ -25,7 +26,7 @@ fn parse(input: &[u8]) -> Vec { .filter(|&&c| (b'0'..=b'9').contains(&c)) .fold(0, |a, &x| (a * 10) + (x - b'0') as i32); - vec![Ins::Noop, Ins::Addx(if is_neg { -b } else { b })] + [Ins::Noop, Ins::Addx(if is_neg { -b } else { b })] } _ => unreachable!(), }) @@ -50,17 +51,18 @@ fn solution(input: Vec) -> String { let mut i = 0; for ip in input.into_iter() { + if let Ins::Null = ip { + continue; + } + if sprite & ((1 << 63) >> i) > 0 { line |= (1 << 63) >> i; } - match ip { - Ins::Noop => {} - Ins::Addx(v) => { - register += v; + if let Ins::Addx(v) = ip { + register += v; - sprite = (0b111 << 61) >> (register - 1); - } + sprite = (0b111 << 61) >> (register - 1); } cycle += 1; i += 1;