Validate all floors. Huge speed up because fewer variants validate.

This commit is contained in:
2016-12-18 16:58:45 +01:00
parent c8f69b1a50
commit ed89ecefb8

View File

@@ -39,23 +39,25 @@ impl Facility {
} }
pub fn validate(&self) -> bool { pub fn validate(&self) -> bool {
let mut generators = HashSet::new(); for f in 0..self.top_floor + 1 {
let mut microchips = HashSet::new(); let mut generators = HashSet::new();
let mut microchips = HashSet::new();
for (i, &(g, m)) in self.components.iter().enumerate() { for (i, &(g, m)) in self.components.iter().enumerate() {
if g == self.elevator { if g == f {
generators.insert(i); generators.insert(i);
}
if m == f {
microchips.insert(i);
}
} }
if m == self.elevator {
microchips.insert(i);
}
}
if !generators.is_empty() { if !generators.is_empty() {
let diff = microchips.difference(&generators).collect::<Vec<_>>(); let diff = microchips.difference(&generators).collect::<Vec<_>>();
if !diff.is_empty() { if !diff.is_empty() {
return false; return false;
}
} }
} }