Validate all floors. Huge speed up because fewer variants validate.
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user