Skip to content

Commit

Permalink
Complete day 3 part 2
Browse files Browse the repository at this point in the history
  • Loading branch information
ricardoholmes committed Dec 3, 2024
1 parent 9c2700e commit e178960
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
1 change: 1 addition & 0 deletions 2024/examples/day_3_1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
38 changes: 36 additions & 2 deletions 2024/src/solutions/day_3.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,40 @@ pub fn part_one(input: &Parsed) -> Result<u32, String> {
Ok(total)
}

pub fn part_two(input: &Parsed) -> Result<usize, String> {
Ok(0)
pub fn part_two(input: &Parsed) -> Result<u32, String> {
let re = Regex::new(r"mul\(([0-9]{1,3}),([0-9]{1,3})\)").unwrap();
let mut total: u32 = 0;

let mut start = Some(0);
let mut stop_idx;
while start.is_some() {
let start_idx = start.unwrap();
stop_idx = input[start_idx..].find("don't()").and_then(|x| Some(x + start_idx)).unwrap_or(input.len());
for (_, [x, y]) in re.captures_iter(&input[start_idx..stop_idx]).map(|c| c.extract()) {
total += x.parse::<u32>().unwrap() * y.parse::<u32>().unwrap();
}
start = input[stop_idx..].find("do()").and_then(|x| Some(x + stop_idx));
}
Ok(total)
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_part1() {
let example = include_str!("../../examples/day_3_1.txt");
let parsed = parse(example).unwrap();
let solution = part_one(&parsed);
assert_eq!(solution, Ok(161));
}

#[test]
fn test_part2() {
let example = include_str!("../../examples/day_3_1.txt");
let parsed = parse(example).unwrap();
let solution = part_two(&parsed);
assert_eq!(solution, Ok(48));
}
}

0 comments on commit e178960

Please sign in to comment.