diff --git a/inputs/2022/2022_10.input b/inputs/2022/2022_10.input new file mode 100644 index 0000000..5796ef3 --- /dev/null +++ b/inputs/2022/2022_10.input @@ -0,0 +1,140 @@ +addx 2 +addx 15 +addx -11 +addx 6 +noop +noop +noop +addx -1 +addx 5 +addx -1 +addx 5 +noop +noop +noop +noop +noop +addx 7 +addx -1 +addx 3 +addx 1 +addx 5 +addx 1 +noop +addx -38 +noop +addx 1 +addx 6 +addx 3 +noop +addx -8 +noop +addx 13 +addx 2 +addx 3 +addx -2 +addx 2 +noop +addx 3 +addx 9 +addx -2 +addx 2 +addx -10 +addx 11 +addx 2 +addx -14 +addx -21 +addx 2 +noop +addx 5 +addx 29 +addx -2 +noop +addx -19 +noop +addx 2 +addx 11 +addx -10 +addx 2 +addx 5 +addx -9 +noop +addx 14 +addx 2 +addx 3 +addx -2 +addx 3 +addx 1 +noop +addx -37 +noop +addx 13 +addx -8 +noop +noop +noop +noop +addx 13 +addx -5 +addx 3 +addx 3 +addx 3 +noop +noop +noop +noop +noop +noop +noop +addx 6 +addx 3 +addx 1 +addx 5 +addx -15 +addx 5 +addx -27 +addx 30 +addx -23 +addx 33 +addx -32 +addx 2 +addx 5 +addx 2 +addx -16 +addx 17 +addx 2 +addx -10 +addx 17 +addx 10 +addx -9 +addx 2 +addx 2 +addx 5 +addx -29 +addx -8 +noop +noop +noop +addx 19 +addx -11 +addx -1 +addx 6 +noop +noop +addx -1 +addx 3 +noop +addx 3 +addx 2 +addx -3 +addx 11 +addx -1 +addx 5 +addx -2 +addx 5 +addx 2 +noop +noop +addx 1 +noop +noop diff --git a/inputs/2022/2022_10.solution b/inputs/2022/2022_10.solution new file mode 100644 index 0000000..b59922a --- /dev/null +++ b/inputs/2022/2022_10.solution @@ -0,0 +1,2 @@ +Part 1: 12880 +Part 2: ??? diff --git a/rs/src/main.rs b/rs/src/main.rs index 6d75e17..7513956 100644 --- a/rs/src/main.rs +++ b/rs/src/main.rs @@ -41,8 +41,11 @@ macro_rules! days { impl Day { fn from_path(path: &Path) -> Option { - let day = &path.file_stem()?.as_bytes()[..7]; - let day = String::from_utf8_lossy(day); + let bytes = path.file_stem()?.as_bytes(); + if bytes.len() < 7 { + return None; + } + let day = String::from_utf8_lossy(&bytes[..7]); Self::from_str(&day).ok() } } @@ -57,6 +60,7 @@ days! { Y2022D07: "2022_07" => y2022::d07::solve, Y2022D08: "2022_08" => y2022::d08::solve, Y2022D09: "2022_09" => y2022::d09::solve, + Y2022D10: "2022_10" => y2022::d10::solve, } #[derive(Parser)] diff --git a/rs/src/y2022.rs b/rs/src/y2022.rs index 297c7bd..8859e04 100644 --- a/rs/src/y2022.rs +++ b/rs/src/y2022.rs @@ -7,3 +7,4 @@ pub mod d06; pub mod d07; pub mod d08; pub mod d09; +pub mod d10; diff --git a/rs/src/y2022/d10.rs b/rs/src/y2022/d10.rs new file mode 100644 index 0000000..e96f948 --- /dev/null +++ b/rs/src/y2022/d10.rs @@ -0,0 +1,47 @@ +#[derive(Clone, Copy)] +struct State { + x: i32, +} + +struct Run { + history: Vec, + now: State, +} + +impl Run { + fn new() -> Self { + Self { + history: vec![], + now: State { x: 1 }, + } + } + + fn noop(&mut self) { + self.history.push(self.now); + } + + fn addx(&mut self, arg: i32) { + self.noop(); + self.noop(); + self.now.x += arg; + } +} + +pub fn solve(input: String) { + let mut run = Run::new(); + for line in input.lines() { + if line == "noop" { + run.noop(); + } else if let Some(arg) = line.strip_prefix("addx ") { + run.addx(arg.parse().unwrap()); + } else { + panic!("Unknown instruction"); + } + } + + let part1 = [20, 60, 100, 140, 180, 220] + .into_iter() + .map(|i| run.history[i - 1].x * i as i32) + .sum::(); + println!("Part 1: {part1}"); +} diff --git a/sample_inputs/2022/2022_10.input b/sample_inputs/2022/2022_10.input new file mode 100644 index 0000000..37ee8ee --- /dev/null +++ b/sample_inputs/2022/2022_10.input @@ -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 diff --git a/sample_inputs/2022/2022_10.solution b/sample_inputs/2022/2022_10.solution new file mode 100644 index 0000000..0d0e18f --- /dev/null +++ b/sample_inputs/2022/2022_10.solution @@ -0,0 +1,2 @@ +Part 1: 13140 +Part 2: ???