From abc1e4a2cfd05a517038842c25bc4ea559b06ca3 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 9 Dec 2023 08:02:37 +0100 Subject: [PATCH] Day09 - part 2 --- src/day09.rs | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/src/day09.rs b/src/day09.rs index 241b648..fecd18c 100644 --- a/src/day09.rs +++ b/src/day09.rs @@ -46,7 +46,33 @@ fn run_part1(input: &str) -> Result> { fn run_part2(input: &str) -> Result> { println!("Running day09 - part 2"); - let res = 0; + + fn compute_diff(values: Vec) -> Vec { + (1..values.len()) + .map(|i| values[i] - values[i - 1]) + .collect() + } + + let res = input.lines() + .filter(|l| !l.is_empty()) + .map(|l| { + let mut values: Vec = l.split(' ') + .map(|v| v.parse().unwrap()) + .collect(); + let mut next: Vec = Vec::new(); + let r = values[0]; + while values.iter().sum::() != 0 { + values = compute_diff(values); + next.push(values[0]); + } + let mut prev = values[0]; + (0..next.len()-1).rev() + .for_each(|i| { + prev = next[i] - prev; + }); + r - prev + }) + .sum(); Ok(res) } @@ -68,6 +94,6 @@ mod tests { #[test] fn day09_part2() { let res = run_part2(TEXT_INPUT); - assert_eq!(0, res.unwrap()); + assert_eq!(2, res.unwrap()); } } -- 2.39.5