diff --git a/src/day3.rs b/src/day3.rs index 75879b2..a4d0109 100644 --- a/src/day3.rs +++ b/src/day3.rs @@ -11,33 +11,32 @@ pub fn get_input(input: &[u8]) -> Vec { // PROBLEM 1 solution #[aoc(day3, part1)] pub fn part1(input: &Vec) -> u64 { - let mut sum = 0u64; let re = Regex::new(r"(?-u)mul\((\d+),(\d+)\)").unwrap(); - for line in input { - let line = line.as_bytes(); - for m in re.captures_iter(line) { - sum += u64::from_radix_10(&m[1]).0 * u64::from_radix_10(&m[2]).0; - } - } - sum + input + .iter() + .map(|line| { + re.captures_iter(line.as_bytes()) + .map(|m| u64::from_radix_10(&m[1]).0 * u64::from_radix_10(&m[2]).0) + .sum::() + }) + .sum() } // PROBLEM 2 solution #[aoc(day3, part2)] pub fn part2(input: &Vec) -> u64 { let mut sum = 0u64; - let mut do_mul = true; + let mut do_mul: u64 = 1; let re = Regex::new(r"(?-u)(do\(\)|don't\(\)|mul\((\d+),(\d+)\))").unwrap(); for line in input { let line = line.as_bytes(); for m in re.captures_iter(line) { match &m[1] { - b"do()" => do_mul = true, - b"don't()" => do_mul = false, - _ if do_mul => { - sum += u64::from_radix_10(&m[2]).0 * u64::from_radix_10(&m[3]).0; + b"do()" => do_mul = 1, + b"don't()" => do_mul = 0, + _ => { + sum += u64::from_radix_10(&m[2]).0 * u64::from_radix_10(&m[3]).0 * do_mul; } - _ => {} } } }