From: alex <> Date: Mon, 2 Dec 2024 07:57:08 +0000 (+0100) Subject: Day02 - part 1 X-Git-Url: https://aoc.elinar.fr/?a=commitdiff_plain;h=28ca24cb30116943ee1ebf924e6b8bf27dbe4f85;p=aoc_2024 Day02 - part 1 --- diff --git a/src/day02.rs b/src/day02.rs new file mode 100644 index 0000000..71a3f8d --- /dev/null +++ b/src/day02.rs @@ -0,0 +1,59 @@ +use std::error::Error; +use std::path::Path; + +pub fn run(input: &str) -> Result<(), Box> { + let res = run_part1(&input)?; + println!("{res}"); + + let res = run_part2(&input)?; + println!("{res}"); + + Ok(()) +} + +fn run_part1(input: &str) -> Result> { + let filename = file!(); + let filename = Path::new(filename).file_stem().unwrap().to_str().unwrap(); + println!("Running {} - part 1", filename); + + let levels = input.lines() + .map(|l| l.split(" ").map(|v| v.parse::().unwrap()).collect::>()) + .filter(|v| + v.is_sorted_by(|a, b| a.abs_diff(*b) >= 1 && a.abs_diff(*b) <= 3) + ); + let res = levels.clone().filter(|v| v.is_sorted_by(|a, b| a < b)).count() + + levels.filter(|v| v.is_sorted_by(|a, b| b < a)).count(); + + Ok(res as u32) +} + +fn run_part2(input: &str) -> Result> { + let filename = file!(); + let filename = Path::new(filename).file_stem().unwrap().to_str().unwrap(); + println!("Running {} - part 1", filename); + + Ok(0) +} + +#[cfg(test)] +mod tests { + use super::*; + + static TEXT_INPUT: &str = "\ +7 6 4 2 1 +1 2 7 8 9 +9 7 6 2 1 +1 3 2 4 5 +8 6 4 4 1 +1 3 6 7 9"; + + #[test] + fn test_part1() { + assert_eq!(2, run_part1(TEXT_INPUT).unwrap()); + } + + #[test] + fn test_part2() { + assert_eq!(0, run_part2(TEXT_INPUT).unwrap()); + } +} diff --git a/src/main.rs b/src/main.rs index e4ab4b5..fde9303 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ use std::fs::File; use std::io::Read; pub mod day01; +pub mod day02; fn main() { let args: Vec = env::args().collect(); @@ -28,6 +29,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box> { match day { "day01" => day01::run(&input)?, + "day02" => day02::run(&input)?, _ => return Err(format!("unknown or unimplemented day \"{day}\"").into()), } Ok(())