From: alex <> Date: Sun, 1 Dec 2024 17:28:07 +0000 (+0100) Subject: Day01 - part 1 X-Git-Url: https://aoc.elinar.fr/?a=commitdiff_plain;h=641cdc3282c66725009a3b7e7580a424357d5c31;p=aoc_2024 Day01 - part 1 --- diff --git a/src/day01.rs b/src/day01.rs new file mode 100644 index 0000000..0fa1992 --- /dev/null +++ b/src/day01.rs @@ -0,0 +1,50 @@ +use std::error::Error; +use std::path::Path; +use std::iter::zip; + +pub fn run(input: &str) -> Result<(), Box> { + let res = run_part1(&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 mut a = Vec::new(); + let mut b = Vec::new(); + for l in input.lines() { + let v: Vec = l.split(" ") + .map(|s| s.parse::().unwrap()) + .collect(); + a.push(v[0]); + b.push(v[1]); + } + a.sort(); + b.sort(); + let res = zip(a.iter(), b.iter()) + .map(|(i, j)| i.abs_diff(*j)) + .sum(); + Ok(res) +} + +#[cfg(test)] +mod tests { + use super::*; + + static TEXT_INPUT: &str = "\ +3 4 +4 3 +2 5 +1 3 +3 9 +3 3"; + + #[test] + fn day01_part1() { + assert_eq!(11, run_part1(TEXT_INPUT).unwrap()); + } +} diff --git a/src/main.rs b/src/main.rs index b838528..e4ab4b5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,8 @@ use std::error::Error; use std::fs::File; use std::io::Read; +pub mod day01; + fn main() { let args: Vec = env::args().collect(); if args.len() != 3 { @@ -25,6 +27,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box> { f.read_to_string(&mut input)?; match day { + "day01" => day01::run(&input)?, _ => return Err(format!("unknown or unimplemented day \"{day}\"").into()), } Ok(())