]> aoc.elinar.fr Git - aoc_2024/commitdiff
Day01 - part 2
authoralex <>
Sun, 1 Dec 2024 17:48:26 +0000 (18:48 +0100)
committeralex <>
Sun, 1 Dec 2024 17:48:26 +0000 (18:48 +0100)
src/day01.rs

index 0fa199237d5505a1887c840568c7592c1c0f9a6d..cc163894175cdf6b72a485e627eb56f78e39a22d 100644 (file)
@@ -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<dyn Error>> {
     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<u32, Box<dyn Error>> {
     Ok(res)
 }
 
+fn run_part2(input: &str) -> Result<u32, Box<dyn Error>> {
+    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<u32> = l.split("   ")
+            .map(|s| s.parse::<u32>().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());
+    }
 }