From a0002e6224957d2a9ecf5f73c2f1d98c073bb6c5 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 15 Dec 2023 07:28:51 +0100 Subject: [PATCH] Day15 - part 1 --- src/day15.rs | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 2 ++ 2 files changed, 70 insertions(+) create mode 100644 src/day15.rs diff --git a/src/day15.rs b/src/day15.rs new file mode 100644 index 0000000..28f26ae --- /dev/null +++ b/src/day15.rs @@ -0,0 +1,68 @@ +use std::io::Read; +use std::error::Error; +use std::fs::File; + +pub fn run(input_file: &str) -> Result<(), Box> { + 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> { + 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> { + 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()); + } +} diff --git a/src/main.rs b/src/main.rs index 6c63e78..76cdbe2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,7 @@ pub mod day09; pub mod day10; pub mod day11; pub mod day14; +pub mod day15; fn main() { let args: Vec = env::args().collect(); @@ -45,6 +46,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box> { "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(()) -- 2.39.5