diff --git a/day10/Cargo.lock b/day10/Cargo.lock new file mode 100644 index 0000000..5f8ea61 --- /dev/null +++ b/day10/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "day10" +version = "0.1.0" 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/data.txt b/day10/data.txt new file mode 100644 index 0000000..3d9acd7 --- /dev/null +++ b/day10/data.txt @@ -0,0 +1,144 @@ +noop +noop +noop +addx 6 +addx -1 +addx 5 +noop +noop +noop +addx 5 +addx -8 +addx 9 +addx 3 +addx 2 +addx 4 +addx 3 +noop +addx 2 +noop +addx 1 +addx 6 +noop +noop +noop +addx -39 +noop +addx 5 +addx 2 +addx -2 +addx 3 +addx 2 +addx 5 +addx 2 +addx 2 +addx 13 +addx -12 +noop +addx 7 +noop +addx 2 +addx 3 +noop +addx -25 +addx 30 +addx -10 +addx 13 +addx -40 +noop +addx 5 +addx 2 +addx 3 +noop +addx 2 +addx 3 +addx -2 +addx 3 +addx -1 +addx 7 +noop +noop +addx 5 +addx -1 +addx 6 +noop +noop +noop +noop +addx 9 +noop +addx -1 +noop +addx -39 +addx 2 +addx 33 +addx -29 +addx 1 +noop +addx 4 +noop +noop +noop +addx 3 +addx 2 +noop +addx 3 +noop +noop +addx 7 +addx 2 +addx 3 +addx -2 +noop +addx -30 +noop +addx 40 +addx -2 +addx -38 +noop +noop +noop +addx 5 +addx 5 +addx 2 +addx -9 +addx 5 +addx 7 +addx 2 +addx 5 +addx -18 +addx 28 +addx -7 +addx 2 +addx 5 +addx -28 +addx 34 +addx -3 +noop +addx 3 +addx -38 +addx 10 +addx -3 +addx 29 +addx -28 +addx 2 +noop +noop +noop +addx 5 +noop +addx 3 +addx 2 +addx 7 +noop +addx -2 +addx 5 +addx 2 +noop +addx 1 +addx 5 +noop +noop +addx -25 +noop +noop diff --git a/day10/src/main.rs b/day10/src/main.rs new file mode 100644 index 0000000..23e31e5 --- /dev/null +++ b/day10/src/main.rs @@ -0,0 +1,67 @@ +#[derive(Debug)] +enum Instruction { + Noop, + AddX(i32), +} + +fn main() { + let contents = std::fs::read_to_string("data.txt").expect("Failed to read file"); + let ops = contents.lines().map(parse).collect::>(); + + let strength = run(&ops); + println!("total signal strength {:?}", strength); +} + +fn parse(line: &str) -> Instruction { + let parts = line.split(" ").collect::>(); + match parts[0] { + "noop" => Instruction::Noop, + _ => Instruction::AddX(parts[1].parse().unwrap()), + } +} + +fn run(ops: &Vec) -> i32 { + let mut x: i32 = 1; + let mut cycle = 1; + let mut to_add = None; + let mut op_idx = 0; + let mut strength = 0; + + while op_idx < ops.len() { + let pixel = cycle % 40; + let diff = (x + 1 - pixel).abs(); + if diff.abs() <= 1 { + print!("#"); + } else { + print!(" "); + } + + match to_add { + None => { + match ops[op_idx] { + Instruction::Noop => (), + Instruction::AddX(v) => { + to_add = Some(v); + } + } + op_idx += 1; + } + Some(v) => { + x += v; + to_add = None; + } + } + + if (cycle + 20) % 40 == 0 { + strength += x * cycle; + } + + if cycle % 40 == 0 { + println!(); + } + + cycle += 1; + } + + strength +} diff --git a/day10/test.txt b/day10/test.txt new file mode 100644 index 0000000..37ee8ee --- /dev/null +++ b/day10/test.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