diff options
| author | nekineki <nekineki@nekineki.net> | 2024-12-11 07:31:43 +0100 |
|---|---|---|
| committer | nekineki <nekineki@nekineki.net> | 2024-12-11 07:31:43 +0100 |
| commit | c7785785a26b7847dd303742545fc8bb35773a4c (patch) | |
| tree | 7745791fcd4e6808b271eb3979b1727ffdf974ce | |
| parent | f3c12bbe0fc05cb522064f062bb1630f0f0de9c8 (diff) | |
simplify day11
| -rw-r--r-- | 2024/day11.rs | 22 |
1 files 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<u64>) -> Vec<u64> { 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); |
