]> aoc.elinar.fr Git - aoc_2024/commitdiff
Day01 - part 1
authoralex <>
Sun, 1 Dec 2024 17:28:07 +0000 (18:28 +0100)
committeralex <>
Sun, 1 Dec 2024 17:29:18 +0000 (18:29 +0100)
src/day01.rs [new file with mode: 0644]
src/main.rs

diff --git a/src/day01.rs b/src/day01.rs
new file mode 100644 (file)
index 0000000..0fa1992
--- /dev/null
@@ -0,0 +1,50 @@
+use std::error::Error;
+use std::path::Path;
+use std::iter::zip;
+
+pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
+    let res = run_part1(&input)?;
+    println!("{res}");
+
+    Ok(())
+}
+
+fn run_part1(input: &str) -> Result<u32, Box<dyn Error>> {
+    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<u32> = l.split("   ")
+            .map(|s| s.parse::<u32>().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());
+    }
+}
index b838528be6cee0a1f6f40fa5beebea8f7767fb5b..e4ab4b5bbc329b9c79895c6e7e8244b8ed717a6b 100644 (file)
@@ -4,6 +4,8 @@ use std::error::Error;
 use std::fs::File;
 use std::io::Read;
 
+pub mod day01;
+
 fn main() {
     let args: Vec<String> = env::args().collect();
     if args.len() != 3 {
@@ -25,6 +27,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box<dyn Error>> {
     f.read_to_string(&mut input)?;
 
     match day {
+        "day01" => day01::run(&input)?,
         _ => return Err(format!("unknown or unimplemented day \"{day}\"").into()),
     }
     Ok(())