diff --git a/Cargo.toml b/Cargo.toml index 503efb3..b5a3aeb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,4 +10,5 @@ members = [ "day7", "day8", "day9", + "day10", ] \ No newline at end of file diff --git a/day10/Cargo.toml b/day10/Cargo.toml new file mode 100644 index 0000000..40d2066 --- /dev/null +++ b/day10/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "day10" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day10/input.txt b/day10/input.txt new file mode 100644 index 0000000..06f7c95 --- /dev/null +++ b/day10/input.txt @@ -0,0 +1,143 @@ +noop +noop +addx 5 +noop +noop +addx 6 +addx 4 +addx -4 +addx 4 +addx -6 +addx 11 +addx -1 +addx 2 +addx 4 +addx 3 +noop +addx 2 +addx -30 +addx 2 +addx 33 +noop +addx -37 +noop +noop +noop +addx 3 +addx 2 +addx 5 +addx 20 +addx 7 +addx -24 +addx 2 +noop +addx 7 +addx -2 +addx -6 +addx 13 +addx 3 +addx -2 +addx 2 +noop +addx -5 +addx 10 +addx 5 +addx -39 +addx 1 +addx 5 +noop +addx 3 +noop +addx -5 +addx 10 +addx -2 +addx 2 +noop +noop +addx 7 +noop +noop +noop +noop +addx 3 +noop +addx 3 +addx 2 +addx 8 +addx -1 +addx -20 +addx 21 +addx -38 +addx 5 +addx 2 +noop +noop +noop +addx 8 +noop +noop +addx -2 +addx 2 +addx -7 +addx 14 +addx 5 +noop +noop +noop +addx -16 +addx 17 +addx 2 +addx -12 +addx 19 +noop +noop +addx -37 +noop +noop +noop +addx 3 +addx 2 +addx 2 +addx 5 +addx 20 +addx -19 +addx 2 +noop +noop +noop +addx 5 +addx 19 +addx -12 +addx 3 +addx -2 +addx 2 +addx -18 +addx 25 +addx -14 +addx -22 +addx 1 +noop +noop +noop +addx 3 +addx 5 +addx -4 +addx 7 +addx 4 +noop +addx 1 +noop +noop +addx 2 +addx -6 +addx 15 +addx -1 +addx 4 +noop +noop +addx 1 +addx 4 +addx -33 +noop +addx 21 +noop \ No newline at end of file diff --git a/day10/sample_input.txt b/day10/sample_input.txt new file mode 100644 index 0000000..94cd0a8 --- /dev/null +++ b/day10/sample_input.txt @@ -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 \ No newline at end of file diff --git a/day10/src/main.rs b/day10/src/main.rs new file mode 100644 index 0000000..0979435 --- /dev/null +++ b/day10/src/main.rs @@ -0,0 +1,55 @@ +fn do_cycle(cycle: u64, x_reg: i64) { + let col = (cycle - 1) % 40; + + // println!("{} <= ") + if x_reg - 1 <= col.try_into().unwrap() && x_reg + 1 >= col.try_into().unwrap() { + print!("#"); + } else { + print!("."); + } + + if col == 39 { + println!(); + } +} + +fn main() { + const INPUT: &str = include_str!("../input.txt"); + const ADD_CYCLES: u64 = 2; + + let mut strengths: Vec = Vec::new(); + let mut cycles = 1u64; + let mut x_reg = 1i64; + + do_cycle(cycles, x_reg); + + + for line in INPUT.lines() { + + if line.starts_with("noop") { + cycles += 1; + } else { + let (_, operand) = line.split_once(' ').unwrap(); + let operand = operand.parse::().unwrap(); + + for _ in 0..(ADD_CYCLES - 1) { + cycles += 1; + if (cycles + 20) % 40 == 0 { + strengths.push((cycles as i64) * x_reg); + } + do_cycle(cycles, x_reg); + } + + cycles += 1; + x_reg += operand; + } + + if (cycles + 20) % 40 == 0 { + strengths.push((cycles as i64) * x_reg); + } + do_cycle(cycles, x_reg); + } + + let sum: i64 = strengths.iter().sum(); + println!("{}", sum); +}