2022 day 23 rust

This commit is contained in:
Maciej Jur 2022-12-23 23:23:22 +01:00
parent 96dfc59fac
commit f6a90d3b73

View file

@ -75,16 +75,13 @@ fn round_iter(data: &HashSet<Loc>) -> Box<dyn Iterator<Item=(bool, Vec<Loc>)>> {
let mut elves = Vec::from_iter(data.iter().copied()); let mut elves = Vec::from_iter(data.iter().copied());
let mut moves = VecDeque::from([move_n, move_s, move_w, move_e]); let mut moves = VecDeque::from([move_n, move_s, move_w, move_e]);
Box::new(std::iter::repeat(()) Box::new(std::iter::repeat(()).map(move |_| {
.map(move |_| {
let occupied = HashSet::from_iter(elves.iter().copied()); let occupied = HashSet::from_iter(elves.iter().copied());
let mut planned = HashMap::<Loc, Vec<usize>>::new(); let mut planned = HashMap::<Loc, Vec<usize>>::new();
for (index, &loc) in elves.iter().enumerate().filter(|&(_, loc)| has_neighbors(&occupied, *loc)) { 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() { if let Some(loc) = moves.iter().filter_map(|f| f(&occupied, loc)).next() {
planned.entry(loc) planned.entry(loc).and_modify(|v| v.push(index)).or_insert(vec![index]);
.and_modify(|v| v.push(index))
.or_insert(vec![index]);
} }
} }