diff options
Diffstat (limited to 'src/day3pt1.rs')
| -rw-r--r-- | src/day3pt1.rs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/src/day3pt1.rs b/src/day3pt1.rs new file mode 100644 index 0000000..7fd9059 --- /dev/null +++ b/src/day3pt1.rs @@ -0,0 +1,64 @@ +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<Broj> = vec![]; + let mut vsim: Vec<Simbol> = 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::<Vec<_>>(); + for i in m { + let broji = i.get(0).unwrap().as_str().parse::<u32>().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::<Vec<_>>(); + 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); +} |
