day3: perf - branchless
This commit is contained in:
parent
a5439062a4
commit
4aa7e9f43c
27
src/day3.rs
27
src/day3.rs
@ -11,33 +11,32 @@ pub fn get_input(input: &[u8]) -> Vec<String> {
|
||||
// PROBLEM 1 solution
|
||||
#[aoc(day3, part1)]
|
||||
pub fn part1(input: &Vec<String>) -> 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::<u64>()
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
|
||||
// PROBLEM 2 solution
|
||||
#[aoc(day3, part2)]
|
||||
pub fn part2(input: &Vec<String>) -> 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;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user