From 845bccc6707394827a93927a05ea239ec0e861f3 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 6 Dec 2023 11:59:47 +0100 Subject: [PATCH] Day06 - part 2 --- src/day06.rs | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/src/day06.rs b/src/day06.rs index 170cd79..6ab699e 100644 --- a/src/day06.rs +++ b/src/day06.rs @@ -88,7 +88,42 @@ fn run_part1(input: &str) -> Result> { fn run_part2(input: &str) -> Result> { println!("Running day06 - part 2"); - let res = 0; + + let input = remove_trailing_char(input, '\n'); + let (str_time, str_dst) = input.split_once('\n').unwrap(); + + let mut time = String::from(str_time.split_once(": ").unwrap().1); + let mut dst = String::from(str_dst.split_once(": ").unwrap().1); + + // on supprime les espaces + time.retain(|c| c != ' '); + dst.retain(|c| c != ' '); + + // les valeurs récupérées ne tiennent plus dans des i32 + let t: i64 = time.parse().unwrap(); + let d: i64 = dst.parse().unwrap(); + + let (a, b, c): (i64, i64, i64) = (1, -t, d); + + let D_b: i64 = b.pow(2); + let D_4ac: i64 = 4 * a * c; + let D = D_b - D_4ac; + if D < 0 { + // pas de solution + unreachable!(); + } + let (a, b, c): (f64, f64, f64) = (a as f64, b as f64, c as f64); + let D: f64 = D as f64; + let mut x1: f64 = ( -b - D.sqrt() ) / ( 2.0 * a ); + let mut x2: f64 = ( -b + D.sqrt() ) / ( 2.0 * a ); + + // gérer le cas d'egalite avec les bornes + if x1 == x1.ceil() { x1 = x1 + 1.0 } + if x2 == x2.floor() { x2 = x2 - 1.0 } + + let (x1, x2) = (x1.ceil() as i32, x2.floor() as i32); + + let res = x2 - x1 + 1; Ok(res) } @@ -127,6 +162,6 @@ Distance: 9 40 200"; #[test] fn day06_part2() { let res = run_part2(TEXT_INPUT); - assert_eq!(0, res.unwrap()); + assert_eq!(71503, res.unwrap()); } } -- 2.39.5