summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorraylu <lurayl@gmail.com>2016-02-22 19:11:39 -0800
committerraylu <lurayl@gmail.com>2016-02-22 19:11:39 -0800
commit416aacc6f6e4ee8a988406ad4a5bc4fa69136564 (patch)
treef7d75537e4a27dc25124539552b16993348c7a38
parentfd8da77c80edd8cf2bfad11987d842341b3aeae6 (diff)
downloadelevator-416aacc6f6e4ee8a988406ad4a5bc4fa69136564.tar.xz
handle multiple elevators
-rwxr-xr-xelevator.py21
1 files changed, 15 insertions, 6 deletions
diff --git a/elevator.py b/elevator.py
index 9469c9a..eec0b44 100755
--- a/elevator.py
+++ b/elevator.py
@@ -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)