Эх сурвалжийг харах

handle multiple elevators

raylu 9 жил өмнө
parent
commit
416aacc6f6
1 өөрчлөгдсөн 15 нэмэгдсэн , 6 устгасан
  1. 15 6
      elevator.py

+ 15 - 6
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)