From bfed992b7ddc88a1c500dd4cd869e3e42cfcf10c Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Wed, 6 Dec 2023 08:53:55 +0100 Subject: [PATCH] Binary search is best search --- 2023/src/day06.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/2023/src/day06.rs b/2023/src/day06.rs index 76e3b47..da58637 100644 --- a/2023/src/day06.rs +++ b/2023/src/day06.rs @@ -47,9 +47,21 @@ fn parse_long_race(i: &[u8]) -> IResult<&[u8], (u64, u64)> { } fn ways(time: u64, distance: u64) -> u64 { - let make_it = (1..=time / 2) - .filter(|&v| v * (time - v) > distance) - .count() as u64; + let half = time / 2; + let mut min = 1; + let mut max = half; + + while min < max { + let mid = min + (max - min) / 2; + + if mid * (time - mid) < distance { + min = mid + 1; + } else { + max = mid; + } + } + + let make_it = half - min + 1; if time % 2 == 0 { 2 * make_it - 1