From 6e8fbe71ef99454214e545bdf5083d54f935f478 Mon Sep 17 00:00:00 2001 From: alex Date: Sat, 9 Dec 2023 08:01:55 +0100 Subject: [PATCH] Day09 - part 1 --- src/day09.rs | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 2 ++ 2 files changed, 75 insertions(+) create mode 100644 src/day09.rs diff --git a/src/day09.rs b/src/day09.rs new file mode 100644 index 0000000..241b648 --- /dev/null +++ b/src/day09.rs @@ -0,0 +1,73 @@ +use std::io::Read; +use std::error::Error; +use std::fs::File; + +pub fn run(input_file: &str) -> Result<(), Box> { + let mut f = File::open(input_file)?; + let mut input = String::new(); + f.read_to_string(&mut input)?; + + let res = run_part1(&input)?; + println!("{res}"); + + let res = run_part2(&input)?; + println!("{res}"); + + Ok(()) +} + +fn run_part1(input: &str) -> Result> { + println!("Running day09 - part 1"); + + 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 = values[values.len() - 1]; + while values.iter().sum::() != 0 { + //dbg!(&values); + values = compute_diff(values); + let d = values[values.len() - 1]; + next += d; + } + next + }) + .sum(); + Ok(res) +} + +fn run_part2(input: &str) -> Result> { + println!("Running day09 - part 2"); + let res = 0; + Ok(res) +} + +#[cfg(test)] +mod tests { + use super::*; + + static TEXT_INPUT: &str = "\ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45"; + + #[test] + fn day09_part1() { + let res = run_part1(TEXT_INPUT); + assert_eq!(114, res.unwrap()); + } + + #[test] + fn day09_part2() { + let res = run_part2(TEXT_INPUT); + assert_eq!(0, res.unwrap()); + } +} diff --git a/src/main.rs b/src/main.rs index a441260..5dc80cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,6 +11,7 @@ pub mod day05; pub mod day06; pub mod day07; pub mod day08; +pub mod day09; fn main() { let args: Vec = env::args().collect(); @@ -37,6 +38,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box> { "day06" => day06::run(input_file)?, "day07" => day07::run(input_file)?, "day08" => day08::run(input_file)?, + "day09" => day09::run(input_file)?, _ => return Err(format!("unknown day \"{day}\"").into()), } Ok(()) -- 2.39.5