diff --git a/2022/input/day_10.txt b/2022/input/day_10.txt new file mode 100644 index 0000000..a554eb8 --- /dev/null +++ b/2022/input/day_10.txt @@ -0,0 +1,138 @@ +addx 1 +addx 5 +addx -1 +addx 20 +addx -14 +addx -1 +addx 5 +addx 13 +addx -12 +addx 3 +addx 3 +addx 3 +addx 1 +addx 4 +noop +noop +addx 1 +noop +noop +addx 4 +noop +addx -35 +addx 11 +addx -1 +addx -7 +addx 5 +addx 2 +addx 3 +addx -2 +addx 2 +addx 5 +addx 5 +noop +noop +addx -2 +addx 2 +noop +addx 3 +addx 2 +addx 7 +noop +noop +addx 3 +addx -2 +addx -36 +noop +addx 25 +addx -22 +addx 7 +noop +addx -2 +noop +noop +noop +addx 5 +addx 5 +addx 4 +noop +addx -2 +addx 5 +addx -4 +addx 5 +addx 4 +noop +addx -29 +addx 32 +addx -23 +addx -12 +noop +addx 7 +noop +addx -2 +addx 4 +addx 3 +addx 20 +addx 3 +addx -20 +addx 5 +addx 16 +addx -15 +addx 6 +noop +noop +noop +addx 5 +noop +addx 5 +noop +noop +noop +addx -37 +addx 2 +addx -2 +addx 7 +noop +addx -2 +addx 5 +addx 2 +addx 3 +addx -2 +addx 2 +addx 5 +addx 2 +addx -6 +addx -15 +addx 24 +addx 2 +noop +addx 3 +addx -8 +addx 15 +addx -14 +addx 15 +addx -38 +noop +noop +addx 21 +addx -14 +addx 1 +addx 5 +noop +addx -2 +addx 7 +addx -1 +addx 5 +noop +addx 2 +addx 3 +addx 3 +addx -2 +addx 4 +addx 2 +addx -17 +addx 20 +noop +noop +noop +noop diff --git a/2022/input/day_10_sample.txt b/2022/input/day_10_sample.txt new file mode 100644 index 0000000..37ee8ee --- /dev/null +++ b/2022/input/day_10_sample.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 diff --git a/2022/src/day_10.rs b/2022/src/day_10.rs new file mode 100644 index 0000000..82dd366 --- /dev/null +++ b/2022/src/day_10.rs @@ -0,0 +1,112 @@ +use Instruction::*; +#[derive(Clone, Copy)] +enum Instruction { + Addx(i32), + Noop, +} +type Data = Vec; +type Output = i32; +fn parse(input: &str) -> Data { + input + .lines() + .map(|line| { + if line.starts_with("addx") { + let (_addx, num) = line.split_once(' ').unwrap(); + Addx(num.parse().unwrap()) + } else { + Noop + } + }) + .collect() +} +fn part_one(data: Data) -> Output { + let mut r_x = 1; + let mut instr_iter = data.iter(); + let mut cycles_left = 0; + let mut last_instr = Noop; + let mut sum = 0; + for cycle in 1.. { + if cycles_left == 0 { + match last_instr { + Noop => {} + Addx(num) => { + r_x += num; + } + } + last_instr = match instr_iter.next() { + Some(instr) => *instr, + _ => break, + }; + cycles_left = match last_instr { + Addx(_) => 2, + Noop => 1, + } + } + if (cycle - 20) % 40 == 0 { + sum += r_x * cycle; + } + cycles_left -= 1; + } + sum +} +fn part_two(data: Data) -> String { + let mut r_x = 1; + let mut instr_iter = data.iter(); + let mut cycles_left = 0; + let mut last_instr = Noop; + let mut output = vec![]; + for cycle in 0.. { + if cycles_left == 0 { + match last_instr { + Noop => {} + Addx(num) => { + r_x += num; + } + } + last_instr = match instr_iter.next() { + Some(instr) => *instr, + _ => break, + }; + cycles_left = match last_instr { + Addx(_) => 2, + Noop => 1, + } + } + let i: i32 = cycle % 40; + if i == 0 { + output.push("".to_string()); + } + if i.abs_diff(r_x) <= 1 { + *output.last_mut().unwrap() += "#"; + } else { + *output.last_mut().unwrap() += "."; + } + cycles_left -= 1; + } + output.join("\n") +} + +advent_of_code_macro::generate_tests!( + day 10, + parse, + part_one, + part_two, + sample tests [ + 13140, +"##..##..##..##..##..##..##..##..##..##.. +###...###...###...###...###...###...###. +####....####....####....####....####.... +#####.....#####.....#####.....#####..... +######......######......######......#### +#######.......#######.......#######....." + ], + star tests [ + 17380, +"####..##...##..#..#.####.###..####..##.. +#....#..#.#..#.#..#....#.#..#.#....#..#. +###..#....#....#..#...#..#..#.###..#.... +#....#.##.#....#..#..#...###..#....#.... +#....#..#.#..#.#..#.#....#.#..#....#..#. +#.....###..##...##..####.#..#.####..##.." + ] +);