From db2aa419d8947fc89f08591a2f73909ddcd589eb Mon Sep 17 00:00:00 2001 From: Jeremy Kaplan Date: Sun, 11 Dec 2022 20:15:19 -0800 Subject: [PATCH] Apparently monkey.id == m if you code it right --- 2022/src/bin/day11.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/2022/src/bin/day11.rs b/2022/src/bin/day11.rs index 44780ed..669e3c9 100644 --- a/2022/src/bin/day11.rs +++ b/2022/src/bin/day11.rs @@ -7,6 +7,12 @@ const INPUT: &str = include_str!("../../input/day11.txt"); fn main() { let monkeys: Vec = aoc::blocks(INPUT).map(Monkey::parse).collect(); + // Assumptions: + for (i, m) in monkeys.iter().enumerate() { + assert!(i == m.id); + assert!(m.operation.is_some()); + } + println!("Part 1: {}", monkey_business(monkeys.clone(), 20, 3)); println!("Part 2: {}", monkey_business(monkeys, 10_000, 1)); } @@ -17,6 +23,8 @@ fn monkey_business(mut monkeys: Vec, rounds: usize, confidence: i64) -> for _ in 1..=rounds { for m in 0..monkeys.len() { // Don't forget to put the monkey back in the vec when we're done! + // + // This is a workaround for simultaneous mutable references to multiple vec items. let mut monkey = std::mem::take(&mut monkeys[m]); for mut item in monkey.items.drain(0..) { @@ -30,8 +38,7 @@ fn monkey_business(mut monkeys: Vec, rounds: usize, confidence: i64) -> monkeys[dest].items.push_back(item); } - let id = monkey.id; - monkeys[id] = monkey; + monkeys[m] = monkey; } }