---cargo --- static CONTENT: &'static str = include_str!("./inputs/02_1.txt"); fn main() { let ranges: Vec<_> = CONTENT.split(',').map(|l| l.trim()).filter(|l| !l.is_empty()).map(|l| { let (raw_start, raw_end) = l.split_once('-').unwrap(); let start: usize = raw_start.parse().unwrap(); let end: usize = raw_end.parse().unwrap(); start..=end }).collect(); println!("Ranges: {:?}", ranges); let mut result = 0; for r in ranges.iter() { for v in r.clone() { let v_len = v.ilog10() + 1; let mut iter = (1..=v_len/2).filter_map(|len| { if v_len % len != 0 { return None; } let mut seqs = (0..v_len/len).map(|i| { let offset = 10_usize.pow(i*len); let mask = 10_usize.pow(len); (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!("Result: {}", result); }