[rs] Solve 2022_10 part 1

This commit is contained in:
Joscha 2022-12-10 15:11:19 +01:00
parent 87103940eb
commit 745a205492
7 changed files with 344 additions and 2 deletions

140
inputs/2022/2022_10.input Normal file
View file

@ -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

View file

@ -0,0 +1,2 @@
Part 1: 12880
Part 2: ???

View file

@ -41,8 +41,11 @@ macro_rules! days {
impl Day { impl Day {
fn from_path(path: &Path) -> Option<Self> { fn from_path(path: &Path) -> Option<Self> {
let day = &path.file_stem()?.as_bytes()[..7]; let bytes = path.file_stem()?.as_bytes();
let day = String::from_utf8_lossy(day); if bytes.len() < 7 {
return None;
}
let day = String::from_utf8_lossy(&bytes[..7]);
Self::from_str(&day).ok() Self::from_str(&day).ok()
} }
} }
@ -57,6 +60,7 @@ days! {
Y2022D07: "2022_07" => y2022::d07::solve, Y2022D07: "2022_07" => y2022::d07::solve,
Y2022D08: "2022_08" => y2022::d08::solve, Y2022D08: "2022_08" => y2022::d08::solve,
Y2022D09: "2022_09" => y2022::d09::solve, Y2022D09: "2022_09" => y2022::d09::solve,
Y2022D10: "2022_10" => y2022::d10::solve,
} }
#[derive(Parser)] #[derive(Parser)]

View file

@ -7,3 +7,4 @@ pub mod d06;
pub mod d07; pub mod d07;
pub mod d08; pub mod d08;
pub mod d09; pub mod d09;
pub mod d10;

47
rs/src/y2022/d10.rs Normal file
View file

@ -0,0 +1,47 @@
#[derive(Clone, Copy)]
struct State {
x: i32,
}
struct Run {
history: Vec<State>,
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::<i32>();
println!("Part 1: {part1}");
}

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

View file

@ -0,0 +1,2 @@
Part 1: 13140
Part 2: ???