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 {
|
||||
let mut generators = HashSet::new();
|
||||
let mut microchips = HashSet::new();
|
||||
for f in 0..self.top_floor + 1 {
|
||||
let mut generators = HashSet::new();
|
||||
let mut microchips = HashSet::new();
|
||||
|
||||
for (i, &(g, m)) in self.components.iter().enumerate() {
|
||||
if g == self.elevator {
|
||||
generators.insert(i);
|
||||
for (i, &(g, m)) in self.components.iter().enumerate() {
|
||||
if g == f {
|
||||
generators.insert(i);
|
||||
}
|
||||
if m == f {
|
||||
microchips.insert(i);
|
||||
}
|
||||
}
|
||||
if m == self.elevator {
|
||||
microchips.insert(i);
|
||||
}
|
||||
}
|
||||
|
||||
if !generators.is_empty() {
|
||||
let diff = microchips.difference(&generators).collect::<Vec<_>>();
|
||||
if !generators.is_empty() {
|
||||
let diff = microchips.difference(&generators).collect::<Vec<_>>();
|
||||
|
||||
if !diff.is_empty() {
|
||||
return false;
|
||||
if !diff.is_empty() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user