From 8089545c22b1ae4a98e967f070c3e298e6808961 Mon Sep 17 00:00:00 2001 From: Aleksa Vuckovic Date: Wed, 6 Dec 2023 01:45:05 +0100 Subject: Initial commit --- src/day3pt2.rs | 69 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/day3pt2.rs (limited to 'src/day3pt2.rs') diff --git a/src/day3pt2.rs b/src/day3pt2.rs new file mode 100644 index 0000000..61d0fd1 --- /dev/null +++ b/src/day3pt2.rs @@ -0,0 +1,69 @@ +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 sim in vsim.as_slice() { + let mut cnt: u32 = 0; + let mut ratio: u32 = 1; + for br in vbr.as_slice() { + if i32::abs(sim.y - br.y) < 2 && br.x - 1 <= sim.x && sim.x <= br.x + br.len { + cnt += 1; + ratio *= br.broj; + } + } + if cnt == 2 { + sum += ratio; + } + } + + println!("{}", sum); +} -- cgit v1.2.3