|
|
@@ -30,10 +30,10 @@ class ElevatorControlSystem:
|
|
|
def step(self):
|
|
|
# serve pickup requests
|
|
|
free_elevators = list(filter(lambda e: e.goal is None, self.elevators.values()))
|
|
|
- if free_elevators:
|
|
|
- for floor, direction in self.pickup_requests:
|
|
|
- elevator = min(free_elevators, key=lambda e: abs(e.floor - floor))
|
|
|
- elevator.goal = floor
|
|
|
+ while free_elevators and self.pickup_requests:
|
|
|
+ floor, direction = self.pickup_requests.pop(0)
|
|
|
+ elevator = min(free_elevators, key=lambda e: abs(e.floor - floor))
|
|
|
+ elevator.goal = floor
|
|
|
|
|
|
# move elevators to requested floors
|
|
|
for elevator in self.elevators.values():
|
|
|
@@ -47,7 +47,7 @@ class ElevatorControlSystem:
|
|
|
elevator.goal = None
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
- ecs = ElevatorControlSystem(1)
|
|
|
+ ecs = ElevatorControlSystem(2)
|
|
|
print(ecs.elevators)
|
|
|
|
|
|
print('requesting pickup on floor 2 down')
|
|
|
@@ -55,7 +55,16 @@ if __name__ == '__main__':
|
|
|
ecs.step()
|
|
|
print(ecs.elevators)
|
|
|
|
|
|
- print('requesting dropoff on floor 1')
|
|
|
+ print('requesting dropoff on floor 1 and pickup on floor 1 up')
|
|
|
ecs.dropoff(0, 1)
|
|
|
+ ecs.pickup(1, Direction.UP)
|
|
|
+ ecs.step()
|
|
|
+ print(ecs.elevators)
|
|
|
+
|
|
|
+ print('requesting dropoff on floor 3')
|
|
|
+ ecs.dropoff(1, 3)
|
|
|
+ ecs.step()
|
|
|
+ print(ecs.elevators)
|
|
|
+
|
|
|
ecs.step()
|
|
|
print(ecs.elevators)
|