use regex::Regex; struct Broj { broj: u32, x: i32, y: i32, len: i32, } struct Simbol { x: i32, y: i32, } pub fn main() { let txt = std::fs::read_to_string("./input/day3.txt").unwrap(); let brojevi = Regex::new(r"\d+").unwrap(); let simboli = Regex::new(r"[^0-9.]+").unwrap(); let mut vbr: Vec = vec![]; let mut vsim: Vec = vec![]; let mut w = 0; let mut h = 0; for line in txt.lines() { if w == 0 { w = line.len(); } let m = brojevi.captures_iter(line).collect::>(); for i in m { let broji = i.get(0).unwrap().as_str().parse::().unwrap(); let xi = i32::try_from(i.get(0).unwrap().start()).unwrap(); let leni = i32::try_from(i.get(0).unwrap().as_str().len()).unwrap(); vbr.push(Broj { broj: broji, x: xi, y: h, len: leni, }); } let s = simboli.captures_iter(line).collect::>(); for i in s { let xi = i32::try_from(i.get(0).unwrap().start()).unwrap(); vsim.push(Simbol { x: xi, y: h }); } h += 1; } let mut sum: u32 = 0; for br in vbr.as_slice() { for sim in vsim.as_slice() { if i32::abs(sim.y - br.y) < 2 && br.x - 1 <= sim.x && sim.x <= br.x + br.len { sum += br.broj; break; } } } println!("{}", sum); }