]> aoc.elinar.fr Git - aoc_2024/commitdiff
Day02 - part 1
authoralex <>
Mon, 2 Dec 2024 07:57:08 +0000 (08:57 +0100)
committeralex <>
Mon, 2 Dec 2024 07:57:08 +0000 (08:57 +0100)
src/day02.rs [new file with mode: 0644]
src/main.rs

diff --git a/src/day02.rs b/src/day02.rs
new file mode 100644 (file)
index 0000000..71a3f8d
--- /dev/null
@@ -0,0 +1,59 @@
+use std::error::Error;
+use std::path::Path;
+
+pub fn run(input: &str) -> Result<(), Box<dyn Error>> {
+    let res = run_part1(&input)?;
+    println!("{res}");
+
+    let res = run_part2(&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 levels = input.lines()
+        .map(|l| l.split(" ").map(|v| v.parse::<u32>().unwrap()).collect::<Vec<u32>>())
+        .filter(|v|
+                v.is_sorted_by(|a, b| a.abs_diff(*b) >= 1 && a.abs_diff(*b) <= 3)
+        );
+    let res = levels.clone().filter(|v| v.is_sorted_by(|a, b| a < b)).count() +
+              levels.filter(|v| v.is_sorted_by(|a, b| b < a)).count();
+
+    Ok(res as u32)
+}
+
+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 1", filename);
+
+    Ok(0)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    static TEXT_INPUT: &str = "\
+7 6 4 2 1
+1 2 7 8 9
+9 7 6 2 1
+1 3 2 4 5
+8 6 4 4 1
+1 3 6 7 9";
+
+    #[test]
+    fn test_part1() {
+        assert_eq!(2, run_part1(TEXT_INPUT).unwrap());
+    }
+
+    #[test]
+    fn test_part2() {
+        assert_eq!(0, run_part2(TEXT_INPUT).unwrap());
+    }
+}
index e4ab4b5bbc329b9c79895c6e7e8244b8ed717a6b..fde930333e6b2a6b85341d16df0e6adaa0ecfd6c 100644 (file)
@@ -5,6 +5,7 @@ use std::fs::File;
 use std::io::Read;
 
 pub mod day01;
+pub mod day02;
 
 fn main() {
     let args: Vec<String> = env::args().collect();
@@ -28,6 +29,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box<dyn Error>> {
 
     match day {
         "day01" => day01::run(&input)?,
+        "day02" => day02::run(&input)?,
         _ => return Err(format!("unknown or unimplemented day \"{day}\"").into()),
     }
     Ok(())