summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornekineki <nekineki@nekineki.net>2024-12-11 07:31:43 +0100
committernekineki <nekineki@nekineki.net>2024-12-11 07:31:43 +0100
commitc7785785a26b7847dd303742545fc8bb35773a4c (patch)
tree7745791fcd4e6808b271eb3979b1727ffdf974ce
parentf3c12bbe0fc05cb522064f062bb1630f0f0de9c8 (diff)
simplify day11
-rw-r--r--2024/day11.rs22
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);