diff --git a/2022/rust/src/solutions/day23.rs b/2022/rust/src/solutions/day23.rs index d1e583e..6eb9517 100644 --- a/2022/rust/src/solutions/day23.rs +++ b/2022/rust/src/solutions/day23.rs @@ -75,28 +75,25 @@ fn round_iter(data: &HashSet) -> Box)>> { let mut elves = Vec::from_iter(data.iter().copied()); let mut moves = VecDeque::from([move_n, move_s, move_w, move_e]); - Box::new(std::iter::repeat(()) - .map(move |_| { - let occupied = HashSet::from_iter(elves.iter().copied()); - let mut planned = HashMap::>::new(); + Box::new(std::iter::repeat(()).map(move |_| { + let occupied = HashSet::from_iter(elves.iter().copied()); + let mut planned = HashMap::>::new(); - for (index, &loc) in elves.iter().enumerate().filter(|&(_, loc)| has_neighbors(&occupied, *loc)) { - if let Some(loc) = moves.iter().filter_map(|f| f(&occupied, loc)).next() { - planned.entry(loc) - .and_modify(|v| v.push(index)) - .or_insert(vec![index]); - } + for (index, &loc) in elves.iter().enumerate().filter(|&(_, loc)| has_neighbors(&occupied, *loc)) { + if let Some(loc) = moves.iter().filter_map(|f| f(&occupied, loc)).next() { + planned.entry(loc).and_modify(|v| v.push(index)).or_insert(vec![index]); } + } - let mut changed = false; - for (loc, planned) in planned.into_iter().filter(|(_, vec)| vec.len() == 1) { - elves[planned[0]] = loc; - changed = true; - } + let mut changed = false; + for (loc, planned) in planned.into_iter().filter(|(_, vec)| vec.len() == 1) { + elves[planned[0]] = loc; + changed = true; + } - moves.rotate_left(1); - (changed, elves.clone()) - })) + moves.rotate_left(1); + (changed, elves.clone()) + })) } fn solve1(data: &HashSet) -> usize {