From a1e96faf87ae857c3abaf1f4e1de0657b01ef489 Mon Sep 17 00:00:00 2001 From: alex <> Date: Sun, 1 Dec 2024 18:48:26 +0100 Subject: [PATCH] Day01 - part 2 --- src/day01.rs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/day01.rs b/src/day01.rs index 0fa1992..cc16389 100644 --- a/src/day01.rs +++ b/src/day01.rs @@ -1,11 +1,15 @@ use std::error::Error; use std::path::Path; use std::iter::zip; +use std::collections::HashMap; pub fn run(input: &str) -> Result<(), Box> { let res = run_part1(&input)?; println!("{res}"); + let res = run_part2(&input)?; + println!("{res}"); + Ok(()) } @@ -31,6 +35,26 @@ fn run_part1(input: &str) -> Result> { Ok(res) } +fn run_part2(input: &str) -> Result> { + let filename = file!(); + let filename = Path::new(filename).file_stem().unwrap().to_str().unwrap(); + println!("Running {} - part 2", filename); + + let mut a = Vec::new(); + let mut b = HashMap::new(); + for l in input.lines() { + let v: Vec = l.split(" ") + .map(|s| s.parse::().unwrap()) + .collect(); + a.push(v[0]); + b.entry(v[1]).and_modify(|c| *c += 1).or_insert(1); + } + let res = a.iter() + .map(|i| i * b.get(i).unwrap_or(&0)) + .sum(); + Ok(res) +} + #[cfg(test)] mod tests { use super::*; @@ -47,4 +71,9 @@ mod tests { fn day01_part1() { assert_eq!(11, run_part1(TEXT_INPUT).unwrap()); } + + #[test] + fn day01_part2() { + assert_eq!(31, run_part2(TEXT_INPUT).unwrap()); + } } -- 2.39.5