diff options
| author | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
|---|---|---|
| committer | mhsn <mail@mhsn.net> | 2026-03-18 21:48:13 +0000 |
| commit | 86bac31392a76da84817eec020d2b84d099b3cc1 (patch) | |
| tree | e2ee52db59b86b914d5b4bcceb19c9b5d899fff4 /2024/11/rust/src | |
| parent | 62fe361fc42dea75deaf7ac31c0ba6ba80e26a9c (diff) | |
| download | puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.tar.gz puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.zip | |
Diffstat (limited to '2024/11/rust/src')
| -rw-r--r-- | 2024/11/rust/src/main.rs | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/2024/11/rust/src/main.rs b/2024/11/rust/src/main.rs deleted file mode 100644 index e352ec4..0000000 --- a/2024/11/rust/src/main.rs +++ /dev/null @@ -1,43 +0,0 @@ -use std::{collections::HashMap, io}; - -fn blink(k @ (s, n): (u64, u64), cache: &mut HashMap<(u64, u64), u64>) -> u64 { - if n == 0 { - return 1; - } - if let Some(v) = cache.get(&k) { - return *v; - } - - // cache this - let v = { - if s == 0 { - return blink((1, n - 1), cache); - } - let digits = s.ilog10() + 1; - let mid = 10u64.pow(digits / 2); - if digits % 2 == 0 { - blink((s / mid, n - 1), cache) + blink((s % mid, n - 1), cache) - } else { - blink((s * 2024, n - 1), cache) - } - }; - - *cache.entry(k).or_insert(v) -} - -fn main() -> io::Result<()> { - let line = io::stdin().lines().flatten().next().unwrap(); - let stones = line - .split_whitespace() - .map(|s| s.parse::<u64>().unwrap()) - .collect::<Vec<_>>(); - - let mut cache = HashMap::new(); - let silver: u64 = stones.iter().map(|s| blink((*s, 25), &mut cache)).sum(); - let gold: u64 = stones.iter().map(|s| blink((*s, 75), &mut cache)).sum(); - - println!("silver: {silver}"); - println!("gold: {gold}"); - - return Ok(()); -} |
