feat: more optimisation

use log10 to calculate num of digits instead of while loop (thx fgardt)

thecoded.prof dbdd87eb 05cafbcb

verified
Changed files
+3 -16
2025
src
days
two
+3 -16
2025/src/days/two/mod.rs
··· 28 28 pub fn part_a(input: Vec<u64>) -> usize { 29 29 input.iter().fold(0, |acc, x| { 30 30 acc + if is_valid_id_a(x.clone()) { 31 - 0usize 31 + 0 32 32 } else { 33 33 *x as usize 34 34 } 35 35 }) 36 36 } 37 37 38 - fn num_digits(mut n: u64) -> u32 { 39 - if n == 0 { 40 - return 1; 41 - } 42 - let mut digits = 0; 43 - while n > 0 { 44 - digits += 1; 45 - n /= 10; 46 - } 47 - digits 48 - } 49 - 50 38 fn is_valid_id_a(id: u64) -> bool { 51 39 // invalid ID's are identifiable due to them being made up from some sequences being repeated 52 40 // eg: 11 -> [1, 1] invalid 53 41 // eg: 123123 -> [123, 123] invalid 54 42 // eg: 123456 -> [123456] valid 55 - let digits = num_digits(id); 43 + let digits = id.ilog10() + 1; 56 44 if digits % 2 == 1 { 57 45 return true; 58 46 } 59 47 60 - let half = digits / 2; 61 - let div = 10u64.pow(half); 48 + let div = 10u64.pow(digits / 2); 62 49 63 50 let left = id / div; 64 51 let right = id % div;