From dba146b29960a45f5bf7e7aacc4d76f4fe1c7fcf Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Sun, 9 Jan 2022 15:44:24 +0100 Subject: [PATCH] Avoid instantiating translated sets --- 2021/src/day19.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/2021/src/day19.rs b/2021/src/day19.rs index 72b761e..41672e8 100644 --- a/2021/src/day19.rs +++ b/2021/src/day19.rs @@ -199,19 +199,18 @@ fn try_overlap(matched: &Scanner, candidate: &Scanner) -> Option<(Point3, Scanne let correct: HashSet<_> = matched.iter().map(|&base| base - matched_pivot).collect(); - let mut relative = HashSet::new(); - for rot in Rotations::new(&candidate.visible) { + for rot in Rotations::new(candidate) { for &start in &rot { - relative.clear(); + let translated_iter = rot.iter().map(|&other| other - start); - relative.extend(rot.iter().map(|&other| other - start)); - - if correct.intersection(&relative).count() >= 12 { + if translated_iter + .clone() + .filter(|p| correct.contains(p)) + .count() + >= 12 + { // Found a solution, build the correct output - let translated = relative - .drain() - .map(|point| point + matched_pivot) - .collect(); + let translated = translated_iter.map(|point| point + matched_pivot).collect(); return Some((start - matched_pivot, Scanner::new(translated))); } @@ -248,6 +247,8 @@ fn parts_common(input: &mut dyn Read) -> (HashSet, Vec) { } } + assert!(scanners.is_empty()); + (points, scanners_found) }