From: alex Date: Sat, 2 Dec 2023 07:57:22 +0000 (+0100) Subject: Day02 - Part 2 X-Git-Url: https://aoc.elinar.fr/?a=commitdiff_plain;h=e0325557c7d6811d709682e2a0ef52793efc8cd1;p=aoc_2023 Day02 - Part 2 --- diff --git a/src/day02.rs b/src/day02.rs index 7e8db57..3223c6a 100644 --- a/src/day02.rs +++ b/src/day02.rs @@ -81,9 +81,48 @@ fn run_part1(input: &str) -> Result> { Ok(res) } -fn run_part2(input: &str) -> Result> { +// on repart de la partie 1 +// sauf que chaque tour/partie/jeu est considéré +// pour chaque partie, trouver le nombre minimal de cubes pour faire les tirages +fn run_part2(input: &str) -> Result> { println!("Running day02 - part 2"); - Ok(input.to_string()) + + // [ red, green, blue ] + let regex = [ + Regex::new(r"(\d+) red").unwrap(), + Regex::new(r"(\d+) green").unwrap(), + Regex::new(r"(\d+) blue").unwrap(), + ]; + + let res = input.lines() + .map(|l| { + let game: Vec<&str> = l.split(':').collect(); + let l = game[1]; + + // tableau qui contient la valeur minimum (donc le max observé) de + // cubes nécessaire à chaque tirage + // REMARQUE: cas où le min de cube est 0 non abordé dans le sujet + let mut max = [ 0, 0, 0 ]; + l.split(';') + .for_each(|draw| { + regex.iter().enumerate() // (re, limit) + .for_each(|(i, re)| { + let caps = re.captures(draw); + if caps.is_some() { + let n = caps.unwrap().get(1); + if n.is_some() { + let n: i32 = n.unwrap().as_str().parse().unwrap(); + if n > max[i] { + max[i] = n; + } + } + } + }); + }); + max.iter().product::() + }) + .sum(); + Ok(res) } #[cfg(test)] @@ -104,8 +143,13 @@ Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"; #[test] fn day02_part2() { - let input = ""; + let input = "\ +Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green +Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue +Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red +Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red +Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"; let res = run_part2(&input); - assert_eq!("", res.unwrap()); + assert_eq!(2286, res.unwrap()); } }