Files
aoc/2025/02.rs
2026-01-08 20:54:19 +01:00

53 lines
1.4 KiB
Rust

---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);
}