From cc8223699571c2875aff39e3829d8e7dc93855cc Mon Sep 17 00:00:00 2001 From: Spectre Date: Fri, 8 Dec 2023 14:30:17 +0100 Subject: [PATCH] day 03 part 2 --- aoc2023/src/day03.rs | 37 +++++++++++++++++++++++++++++++------ src/main.rs | 2 +- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/aoc2023/src/day03.rs b/aoc2023/src/day03.rs index c3de21b..e6bfed0 100644 --- a/aoc2023/src/day03.rs +++ b/aoc2023/src/day03.rs @@ -51,14 +51,39 @@ impl Solution for Day03 { let mut out: u64 = 0; - for (i, line) in lines.iter().enumerate() { + let gear = Regex::new(r"\*").unwrap(); + let num = Regex::new(r"\d+").unwrap(); + for (i, line) in lines.iter().enumerate() { + for star in gear.find_iter(line) { + let prev = if i > 0 { lines.get(i - 1) } else { None }; + let curr = lines.get(i); + let next = lines.get(i+1); + + let mut nums: Vec = vec![]; + + if prev != None { + for number in num.find_iter(prev.unwrap()) { + if ((1.max(number.start())-1)..(number.end()+1)).contains(&star.start()) { nums.push(number.as_str().parse().unwrap()) } + } + } + if curr != None { + for number in num.find_iter(curr.unwrap()) { + if ((1.max(number.start())-1)..(number.end()+1)).contains(&star.start()) { nums.push(number.as_str().parse().unwrap()) } + } + } + if next != None { + for number in num.find_iter(next.unwrap()) { + if ((1.max(number.start())-1)..(number.end()+1)).contains(&star.start()) { nums.push(number.as_str().parse().unwrap()) } + } + } + + if nums.len() == 2 { + out += nums[0] * nums[1] + } + } } - Answer::Unimplemented + Answer::from(out) } } - -fn extract_num(line: &str, pos: usize) -> u64 { - todo!() -} diff --git a/src/main.rs b/src/main.rs index 97d0947..dda995e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,7 +11,7 @@ fn main() { let Ok(data) = load_actual(2023, 3) else { return; }; - let result = aoc2023::day03::Day03.part_1(&data); + let result = aoc2023::day03::Day03.part_2(&data); let elapsed = now.elapsed();