diff --git a/2025/02.rs b/2025/02.rs index 942b13a..ba02ca6 100644 --- a/2025/02.rs +++ b/2025/02.rs @@ -17,18 +17,34 @@ fn main() { let mut result = 0; for r in ranges.iter() { for v in r.clone() { - let len = v.ilog10() + 1; - if len % 2 != 0 { - continue; - } + let v_len = v.ilog10() + 1; + + let mut iter = (1..=v_len/2).filter_map(|len| { + if v_len % len != 0 { + return None; + } - let first_half = v / 10_usize.pow(len/2); - let second_half = v - (first_half * 10_usize.pow(len/2)); + let mut seqs = (0..v_len/len).map(|i| { + let offset = 10_usize.pow(i*len); + let mask = 10_usize.pow(len); - if first_half == second_half { + (v/offset) % mask + }); + + let first = match seqs.next() { + Some(f) => f, + None => return None, + }; + + let invalid = seqs.all(|s| s == first); + invalid.then_some((first, len, v_len/len)) + }); + + let first = iter.next(); + if first.is_some() { + println!("{} - {:?}", v, first); result += v; - println!("Invalid {} - Halves ({}, {})", v, first_half, second_half); - } + } } }