1
0

day 7 speedup

This commit is contained in:
2024-12-07 08:07:26 +01:00
parent af98c60972
commit 19c60b98db

View File

@@ -82,21 +82,30 @@ fn well(expected: i64, acc: i64, operands: &[i64]) -> bool {
if operands.is_empty() {
return expected == acc;
}
if acc > expected {
return false;
}
let next = operands[0];
let remainder = &operands[1..];
let v_mul = acc * next;
let v_plus = acc + next;
let v_concat = format!("{acc}{next}").parse().unwrap();
let v_concat = concat(acc, next);
well(expected, v_mul, remainder)
|| well(expected, v_plus, remainder)
|| well(expected, v_concat, remainder)
}
fn concat(lhs: i64, rhs: i64) -> i64 {
let exp: u32 = (rhs as f64).log10().ceil() as u32;
let shift = 10i64.pow(exp);
lhs * shift + rhs
}
#[cfg(test)]
mod test {
use super::{part1, part2};
use super::{concat, part1, part2};
const TEST_INPUT: &str = r"190: 10 19
3267: 81 40 27
@@ -117,4 +126,9 @@ mod test {
fn test2() {
assert_eq!(part2(TEST_INPUT), 11387);
}
#[test]
fn test_concat() {
assert_eq!(1234, concat(12, 34));
}
}