From c7785785a26b7847dd303742545fc8bb35773a4c Mon Sep 17 00:00:00 2001 From: nekineki Date: Wed, 11 Dec 2024 07:31:43 +0100 Subject: simplify day11 --- 2024/day11.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/2024/day11.rs b/2024/day11.rs index 0730c5f..93ea695 100644 --- a/2024/day11.rs +++ b/2024/day11.rs @@ -23,8 +23,8 @@ fn evolve(s: &Vec) -> Vec { return sn; } -fn evolve_fast(n: u64, depth: u64, depth_end: u64, lut: &mut HashMap<(u64, u64), u64>) -> u64 { - if depth == depth_end { +fn evolve_fast(n: u64, depth: u64, lut: &mut HashMap<(u64, u64), u64>) -> u64 { + if depth == 0 { return 1; } @@ -32,20 +32,20 @@ fn evolve_fast(n: u64, depth: u64, depth_end: u64, lut: &mut HashMap<(u64, u64), return *val; } - let sum = if n == 0 { - evolve_fast(1, depth + 1, depth_end, lut) + let val = if n == 0 { + evolve_fast(1, depth - 1, lut) } else if n.checked_ilog(10).unwrap() % 2 == 1 { let pow = 10_u64.pow(n.checked_ilog(10).unwrap() / 2 + 1); - let a = evolve_fast(n / pow, depth + 1, depth_end, lut); - let b = evolve_fast(n % pow, depth + 1, depth_end, lut); + let a = evolve_fast(n / pow, depth - 1, lut); + let b = evolve_fast(n % pow, depth - 1, lut); a + b } else { - evolve_fast(n * 2024, depth + 1, depth_end, lut) + evolve_fast(n * 2024, depth - 1, lut) }; - lut.insert((n, depth), sum); + lut.insert((n, depth), val); - return sum; + return val; } fn main() { @@ -70,9 +70,9 @@ fn main() { let mut s2 = stones.clone(); let mut res2 = 0; - let mut hm = HashMap::new(); + let mut lut = HashMap::new(); for n in s2 { - res2 += evolve_fast(n, 0, 75, &mut hm); + res2 += evolve_fast(n, 75, &mut lut); } println!("res1: {}", res1); -- cgit v1.2.3