diff --git a/src/day8.rs b/src/day8.rs index bdedf96..a092b6d 100644 --- a/src/day8.rs +++ b/src/day8.rs @@ -21,7 +21,7 @@ impl Inst { Inst::Nop { unused } => Some(Inst::Jmp { offset: *unused }), _ => None, } { - *self=new_inst; + *self = new_inst; }; } } diff --git a/src/day9.rs b/src/day9.rs new file mode 100644 index 0000000..8204ed6 --- /dev/null +++ b/src/day9.rs @@ -0,0 +1,50 @@ +use aoc_runner_derive::{aoc, aoc_generator}; + +#[aoc_generator(day9)] +pub fn input_generator(input: &str) -> Vec { + input + .lines() + .map(|l| l.trim().parse()) + .collect::, _>>() + .unwrap() +} + +#[aoc(day9, part1)] +pub fn solve_part1(input: &Vec) -> usize { + for (n, win) in input.as_slice().windows(25).enumerate() { + let n = n + 25; + if n >= input.len() { + continue; + } + let c = input[n]; + let mut valid = false; + for (i1, n1) in win.iter().enumerate() { + for (i2, n2) in win.iter().enumerate() { + if i1 == i2 { + continue; + } + if n1 + n2 == c { + valid = true; + } + } + } + if !valid { + return c; + } + } + panic!("No match found!"); +} + +#[aoc(day9, part2)] +pub fn solve_part2(input: &Vec) -> usize { + let inv_num = solve_part1(input); + for start in 0..input.len() { + for length in 2..(input.len() - start) { + let s: Vec = input.iter().skip(start).take(length).cloned().collect(); + if s.iter().sum::() == inv_num { + return s.iter().max().unwrap() + s.iter().min().unwrap(); + } + } + } + panic!("No match found!"); +} diff --git a/src/lib.rs b/src/lib.rs index 9227115..52cb170 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -7,4 +7,5 @@ pub mod day5; pub mod day6; pub mod day7; pub mod day8; +pub mod day9; aoc_lib! { year = 2020 }