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() { if operands.is_empty() {
return expected == acc; return expected == acc;
} }
if acc > expected {
return false;
}
let next = operands[0]; let next = operands[0];
let remainder = &operands[1..]; let remainder = &operands[1..];
let v_mul = acc * next; let v_mul = acc * next;
let v_plus = 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_mul, remainder)
|| well(expected, v_plus, remainder) || well(expected, v_plus, remainder)
|| well(expected, v_concat, 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)] #[cfg(test)]
mod test { mod test {
use super::{part1, part2}; use super::{concat, part1, part2};
const TEST_INPUT: &str = r"190: 10 19 const TEST_INPUT: &str = r"190: 10 19
3267: 81 40 27 3267: 81 40 27
@@ -117,4 +126,9 @@ mod test {
fn test2() { fn test2() {
assert_eq!(part2(TEST_INPUT), 11387); assert_eq!(part2(TEST_INPUT), 11387);
} }
#[test]
fn test_concat() {
assert_eq!(1234, concat(12, 34));
}
} }