From 3c899e77824d0da58dcc0364d9f620af12fcd376 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sun, 1 Dec 2024 17:38:42 +0200 Subject: [PATCH] day-01 part-2 --- 2024/day-01/src/part2.rs | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/2024/day-01/src/part2.rs b/2024/day-01/src/part2.rs index 91ef1a3..c6f3c36 100644 --- a/2024/day-01/src/part2.rs +++ b/2024/day-01/src/part2.rs @@ -1,8 +1,28 @@ use color_eyre::Result; pub fn process(input: &str) -> Result { - todo!("day xx - part 2"); - Ok(0) + let sum = { + let (firsts, lasts): (Vec<_>, Vec<_>) = input + .lines() + .filter(|line| !line.is_empty()) + .map(|line| { + let nums = line + .split_whitespace() + .map(|num| num.parse::().unwrap()) + .collect::>(); + (*nums.first().unwrap(), *nums.last().unwrap()) + }) + .unzip(); + + firsts + .iter() + .map(|x| { + let count = lasts.iter().filter(|&y| y == x).count(); + x * count + }) + .sum() + }; + Ok(sum) } #[cfg(test)] @@ -11,9 +31,16 @@ mod tests { #[test] fn test_process() -> Result<()> { - let input = ""; - todo!("haven't built test yet"); - assert_eq!(0, process(input)?); + let input = " +3 4 +4 3 +2 5 +1 3 +3 9 +3 3 +"; + let result = 31; + assert_eq!(process(input)?, result); Ok(()) } }