]> aoc.elinar.fr Git - aoc_2023/commitdiff
Day15 - part 1
authoralex <null>
Fri, 15 Dec 2023 06:28:51 +0000 (07:28 +0100)
committeralex <null>
Fri, 15 Dec 2023 06:48:46 +0000 (07:48 +0100)
src/day15.rs [new file with mode: 0644]
src/main.rs

diff --git a/src/day15.rs b/src/day15.rs
new file mode 100644 (file)
index 0000000..28f26ae
--- /dev/null
@@ -0,0 +1,68 @@
+use std::io::Read;
+use std::error::Error;
+use std::fs::File;
+
+pub fn run(input_file: &str) -> Result<(), Box<dyn Error>> {
+    let mut f = File::open(input_file)?;
+    let mut input = String::new();
+    f.read_to_string(&mut input)?;
+
+    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>> {
+    println!("Running day15 - part 1");
+
+    let s = match input.ends_with('\n') {
+        false => input,
+        true  => &input[..input.len() - 1],
+    };
+    let res = s.split(',')
+        .filter_map(|h| {
+            match h.is_empty() {
+                true => None,
+                false => {
+                    let mut r: u32 = 0;
+                    h.as_bytes().iter()
+                        .for_each(|&b| {
+                            r = ((r + b as u32) * 17 ) % 256;
+                        });
+                    Some(r)
+                },
+            }
+        })
+        .sum();
+
+    Ok(res)
+}
+
+fn run_part2(input: &str) -> Result<u32, Box<dyn Error>> {
+    println!("Running day15 - part 2");
+    let res = 0;
+    Ok(res)
+}
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+
+    static TEXT_INPUT: &str = "rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7";
+
+    #[test]
+    fn day15_part1() {
+        let res = run_part1(TEXT_INPUT);
+        assert_eq!(1320, res.unwrap());
+    }
+
+    #[test]
+    fn day15_part2() {
+        let res = run_part2(TEXT_INPUT);
+        assert_eq!(0, res.unwrap());
+    }
+}
index 6c63e781f6269713f3fe028a9c92babe11dc74e7..76cdbe2db56e35c14f5c047d78a017da9ae93286 100644 (file)
@@ -15,6 +15,7 @@ pub mod day09;
 pub mod day10;
 pub mod day11;
 pub mod day14;
+pub mod day15;
 
 fn main() {
     let args: Vec<String> = env::args().collect();
@@ -45,6 +46,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box<dyn Error>> {
         "day10" => day10::run(input_file)?,
         "day11" => day11::run(input_file)?,
         "day14" => day14::run(input_file)?,
+        "day15" => day15::run(input_file)?,
         _ => return Err(format!("unknown day \"{day}\"").into()),
     }
     Ok(())