aboutsummaryrefslogtreecommitdiff
path: root/src/day3pt2.rs
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-12-06 01:45:05 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-12-06 01:45:05 +0100
commit8089545c22b1ae4a98e967f070c3e298e6808961 (patch)
tree0f8b13fbdeffc7ae03f3d7bfefbf6ef81bb3fb3a /src/day3pt2.rs
Initial commit
Diffstat (limited to 'src/day3pt2.rs')
-rw-r--r--src/day3pt2.rs69
1 files changed, 69 insertions, 0 deletions
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<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 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);
+}