From: alex <> Date: Tue, 3 Dec 2024 08:20:27 +0000 (+0100) Subject: Day03 - part 1 X-Git-Url: https://aoc.elinar.fr/?a=commitdiff_plain;h=a80b6bff6a989df542d20f02fc631883b2f048a4;p=aoc_2024 Day03 - part 1 --- diff --git a/Cargo.toml b/Cargo.toml index 74b5bcc..6ca4d87 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,3 +4,4 @@ version = "0.1.0" edition = "2021" [dependencies] +regex = "1.11.1" diff --git a/src/day03.rs b/src/day03.rs new file mode 100644 index 0000000..a650dfd --- /dev/null +++ b/src/day03.rs @@ -0,0 +1,61 @@ +use std::error::Error; +use std::path::Path; +use regex::Regex; + +pub fn run(input: &str) -> Result<(), Box> { + let res = run_part1(&input)?; + println!("{res}"); + + let res = run_part2(&input)?; + println!("{res}"); + + Ok(()) +} + +fn get_day() -> String { + let filename = file!(); + Path::new(filename).file_stem().unwrap().to_str().unwrap().to_string() +} + +fn run_part1(input: &str) -> Result> { + println!("Running {} - part 1", get_day()); + + let re = Regex::new(r"mul\(\d{1,3},\d{1,3}\)").unwrap(); + + let res: u32 = re.find_iter(input) + .map(|m| m.as_str()) + .map(|m| { + let v = m[4..m.len()-1] + .split(",") + .map(|v| v.parse::().unwrap()) + .collect::>(); + v[0]*v[1] + }) + .sum(); + + Ok(res) +} + +fn run_part2(input: &str) -> Result> { + println!("Running {} - part 2", get_day()); + + Ok(0) +} + +#[cfg(test)] +mod tests { + use super::*; + + static TEXT_INPUT: &str = "\ +xmul(2,4)%&mul[3,7]!@^do_not_mul(5,5)+mul(32,64]then(mul(11,8)mul(8,5))"; + + #[test] + fn test_part1() { + assert_eq!(161, run_part1(TEXT_INPUT).unwrap()); + } + + #[test] + fn test_part2() { + assert_eq!(0, run_part2(TEXT_INPUT).unwrap()); + } +} diff --git a/src/main.rs b/src/main.rs index fde9303..fb8a351 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,6 +6,7 @@ use std::io::Read; pub mod day01; pub mod day02; +pub mod day03; fn main() { let args: Vec = env::args().collect(); @@ -30,6 +31,7 @@ fn run(day: &str, input_file: &str) -> Result<(), Box> { match day { "day01" => day01::run(&input)?, "day02" => day02::run(&input)?, + "day03" => day03::run(&input)?, _ => return Err(format!("unknown or unimplemented day \"{day}\"").into()), } Ok(())