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 /2025/11 | |
| parent | 62fe361fc42dea75deaf7ac31c0ba6ba80e26a9c (diff) | |
| download | puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.tar.gz puzzles-86bac31392a76da84817eec020d2b84d099b3cc1.zip | |
Diffstat (limited to '2025/11')
| -rw-r--r-- | 2025/11/rust/Cargo.lock | 7 | ||||
| -rw-r--r-- | 2025/11/rust/Cargo.toml | 6 | ||||
| -rw-r--r-- | 2025/11/rust/src/main.rs | 84 |
3 files changed, 0 insertions, 97 deletions
diff --git a/2025/11/rust/Cargo.lock b/2025/11/rust/Cargo.lock deleted file mode 100644 index ab53f99..0000000 --- a/2025/11/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aoc_2025-11" -version = "0.1.0" diff --git a/2025/11/rust/Cargo.toml b/2025/11/rust/Cargo.toml deleted file mode 100644 index 9fbcc03..0000000 --- a/2025/11/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "aoc_2025-11" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/2025/11/rust/src/main.rs b/2025/11/rust/src/main.rs deleted file mode 100644 index 522d7ad..0000000 --- a/2025/11/rust/src/main.rs +++ /dev/null @@ -1,84 +0,0 @@ -use std::{cell::RefCell, collections::HashMap, io, rc::Rc}; - -#[derive(PartialEq, Eq, Hash, Debug)] -struct Node { - device: String, - dac: bool, - fft: bool, -} - -fn main() { - let adj = io::stdin() - .lines() - .flatten() - .map(|line| { - let (k, v) = line.split_once(": ").unwrap(); - ( - String::from(k), - String::from(v) - .split_whitespace() - .map(String::from) - .collect(), - ) - }) - .collect::<HashMap<String, Vec<String>>>(); - - let cache = Rc::new(RefCell::new(HashMap::new())); - - let silver = paths_from( - Node { - device: String::from("you"), - dac: true, - fft: true, - }, - &adj, - Rc::clone(&cache), - ); - let gold = paths_from( - Node { - device: String::from("svr"), - dac: false, - fft: false, - }, - &adj, - Rc::clone(&cache), - ); - - println!("silver: {silver}"); - println!("gold: {gold}"); -} - -fn paths_from( - curr: Node, - adj: &HashMap<String, Vec<String>>, - cache: Rc<RefCell<HashMap<Node, usize>>>, -) -> usize { - if curr.device == "out" { - if curr.dac && curr.fft { - return 1; - } - return 0; - } - - let Some(&v) = cache.borrow().get(&curr) else { - let paths = adj - .get(&curr.device) - .unwrap() - .iter() - .map(|n| { - paths_from( - Node { - device: n.clone(), - dac: curr.dac || curr.device == "dac", - fft: curr.fft || curr.device == "fft", - }, - adj, - Rc::clone(&cache), - ) - }) - .sum(); - cache.borrow_mut().insert(curr, paths); - return paths; - }; - return v; -} |
