diff --git a/day04/Day04.rs b/day04/Day04.rs index 66674ed..7303359 100644 --- a/day04/Day04.rs +++ b/day04/Day04.rs @@ -3,14 +3,8 @@ fn main() { part2(246515, 739105); } -fn digit_count(n: usize) -> u32 { - if n == 0 { 1 } else { (n as f64).log10().floor() as u32 + 1 } -} - fn digit_n(digit: u32, n: usize) -> usize { - let digit_count = digit_count(n); - println!("{} {} {}", n, digit_count, digit); - let place = 10usize.pow(digit_count - digit); + let place = 10usize.pow(5 - digit); (n / place) % 10 } @@ -26,8 +20,7 @@ fn is_increasing(n: usize) -> bool { } fn has_double(n: usize) -> bool { - let digit_count = digit_count(n); - for digit in 0 .. digit_count { + for digit in 0 .. 5 { let this = digit_n(digit, n); let next = digit_n(digit + 1, n); if next == this { @@ -38,7 +31,15 @@ fn has_double(n: usize) -> bool { } fn has_strict_double(n: usize) -> bool { - false + let mut doubles: [usize; 10] = Default::default(); + for digit in 0 .. 5 { + let this = digit_n(digit, n); + let next = digit_n(digit + 1, n); + if next == this { + doubles[this] += 1; + } + } + doubles.contains(&1) } fn part1(lower: usize, upper: usize) { @@ -53,11 +54,6 @@ fn part1(lower: usize, upper: usize) { fn part2(lower: usize, upper: usize) { let mut count = 0; - - for n in &[112233, 123444, 111122, 144455, 114444] { - println!("{} has_strict_double: {}", n, has_strict_double(*n)); - } - for n in lower ..= upper { if is_increasing(n) && has_strict_double(n) { count += 1;