From 34c916b357eb6d4777e23f711973db0f6dcb6486 Mon Sep 17 00:00:00 2001 From: Maciej Jur Date: Wed, 21 Dec 2022 10:40:09 +0100 Subject: [PATCH] 2022 day 21 rust part 2 WIP --- 2022/rust/src/solutions/day21.rs | 34 ++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/2022/rust/src/solutions/day21.rs b/2022/rust/src/solutions/day21.rs index 4ac3d74..b74c072 100644 --- a/2022/rust/src/solutions/day21.rs +++ b/2022/rust/src/solutions/day21.rs @@ -91,6 +91,40 @@ fn solve1(data: &[Monkey]) -> i64 { } fn solve2(data: &[Monkey]) -> i64 { + let mut finished = HashMap::new(); + let mut awaiting = HashMap::new(); + let mut dependees = HashMap::new(); + + for monkey in data { + if monkey.name == "humn" { + continue + }; + match monkey.shout { + Shout::Number(n) => { + finished.insert(monkey.name, n); + chain_eval(monkey.name, &dependees, &mut awaiting, &mut finished); + }, + Shout::LazyOp(l, op, r) => + match (finished.contains_key(l), finished.contains_key(r)) { + (true, true) => { + finished.insert(monkey.name, op.apply(finished[l], finished[r])); + chain_eval(monkey.name, &dependees, &mut awaiting, &mut finished); + } + _ => { + awaiting.insert(monkey.name, monkey.shout); + dependees.entry(l).or_insert(vec![]).push(monkey.name); + dependees.entry(r).or_insert(vec![]).push(monkey.name); + } + }, + }; + } + + match awaiting["root"] { + Shout::LazyOp(l, _, r)=> { + println!("hi"); + }, + _ => unreachable!(), + }; 2 }