浏览代码

Fix broken elevator 0

master
父节点
当前提交
0a817f3f25
共有 1 个文件被更改,包括 33 次插入22 次删除
  1. 33
    22
      elevator.js

+ 33
- 22
elevator.js 查看文件

22
 		// Functions
22
 		// Functions
23
 		// ----
23
 		// ----
24
 
24
 
25
-		function getClosestFloor(currentFloor, floorList, direction = IDLE, ignoredFloors = new Set()){
25
+		function getClosestFloor(currentFloor, floorList, ignoredFloors = new Set(), direction = IDLE){
26
 			let closestFloor = currentFloor;
26
 			let closestFloor = currentFloor;
27
 			let distance     = floorCount;
27
 			let distance     = floorCount;
28
 			let newDistance  = distance;
28
 			let newDistance  = distance;
49
 			}
49
 			}
50
 		}
50
 		}
51
 
51
 
52
-		function sendToNext(elevator, destinations, requests, restFloors) {
53
-			if (elevator.loadFactor() < 1) {
52
+		function sendToNext(elevators, elevatorIndex, destinations, requests, restFloors) {
53
+			elevator = elevators[elevatorIndex]
54
+			if (elevator.loadFactor() < 0.8) {
54
 				if (requests[UP].size > 0 || requests[DOWN].size > 0 || destinations.size > 0) {
55
 				if (requests[UP].size > 0 || requests[DOWN].size > 0 || destinations.size > 0) {
55
 					let allStops = new Set([...destinations, ...requests[UP], ...requests[DOWN]]);
56
 					let allStops = new Set([...destinations, ...requests[UP], ...requests[DOWN]]);
56
 					try {
57
 					try {
57
-						elevator.goToFloor(getClosestFloor(elevator.currentFloor(), allStops));
58
+						floorNum = getClosestFloor(elevator.currentFloor(), allStops)
59
+						console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + floorNum + "]");
60
+						elevator.goToFloor(floorNum);
58
 					} catch (e) {
61
 					} catch (e) {
62
+						console.log("> No closest floor. Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]");
59
 						elevator.goToFloor(restFloors[1]);
63
 						elevator.goToFloor(restFloors[1]);
60
 					}
64
 					}
65
+				} else {
66
+					console.log("> Sending elevator[" + elevatorIndex + "] to rest floor[" + restFloors[1] + "]");
67
+					elevator.goToFloor(restFloors[1]);
61
 				}
68
 				}
62
 			} else {
69
 			} else {
63
-				elevator.goToFloor(getClosestFloor(elevator.currentFloor(), destinations));
70
+				floorNum = getClosestFloor(elevator.currentFloor(), destinations)
71
+				console.log("> Sending elevator[" + elevatorIndex + "] to destination floor[" + floorNum + "]");
72
+				elevator.goToFloor(floorNum);
64
 			}
73
 			}
65
 		}
74
 		}
66
 
75
 
69
 			let distance        = floorCount;
78
 			let distance        = floorCount;
70
 			let newDistance     = distance;
79
 			let newDistance     = distance;
71
 
80
 
72
-			elevators.forEach(function (elevator) {
81
+			elevators.forEach(function (elevator, elevatorIndex) {
73
 				newDistance = Math.abs(elevator.currentFloor() - floorNum);
82
 				newDistance = Math.abs(elevator.currentFloor() - floorNum);
74
 				if (newDistance < distance) {
83
 				if (newDistance < distance) {
75
 					distance = newDistance;
84
 					distance = newDistance;
76
-					closestElevator = elevators.indexOf(elevator);
85
+					closestElevator = elevatorIndex;
77
 				}
86
 				}
78
 			});
87
 			});
79
 
88
 
89
+			//console.log("Closest is elevator[" + closestElevator + "]")
80
 			elevators[closestElevator].goToFloor(floorNum);
90
 			elevators[closestElevator].goToFloor(floorNum);
81
 		}
91
 		}
82
 
92
 
102
 
112
 
103
 		floors.forEach(function (floor) {
113
 		floors.forEach(function (floor) {
104
 			floor.on("up_button_pressed", function() {
114
 			floor.on("up_button_pressed", function() {
105
-				console.log("> Up request on floor[" + floor.level + "]");
106
-				requests[UP].add(floor.floorNum);
107
-				bringClosestElevator(floor.floorNum);
115
+				//console.log("> Up request on floor[" + floor.level + "]");
116
+				requests[UP].add(floor.level);
117
+				//bringClosestElevator(floor.level);
108
 			});
118
 			});
109
 			floor.on("down_button_pressed", function() {
119
 			floor.on("down_button_pressed", function() {
110
-				console.log("> Down request on floor[" + floor.level + "]");
111
-				requests[DOWN].add(floor.floorNum);
112
-				bringClosestElevator(floor.floorNum);
120
+				//console.log("> Down request on floor[" + floor.level + "]");
121
+				requests[DOWN].add(floor.level);
122
+				//bringClosestElevator(floor.level);
113
 			});
123
 			});
114
 		});
124
 		});
115
 
125
 
117
 		// Elevators
127
 		// Elevators
118
 		// ----
128
 		// ----
119
 
129
 
120
-		elevators.forEach(function (elevator) {
130
+		elevators.forEach(function (elevator, elevatorIndex) {
121
 
131
 
122
 			// Basic elevator info
132
 			// Basic elevator info
123
-			const elevatorIndex = elevators.indexOf(elevator);
124
 			const restFloors = [
133
 			const restFloors = [
125
-				(elevatorIndex + 0) * Math.floor(floorCount / (elevatorCount + 1)),
134
+				elevatorIndex * Math.floor(floorCount / (elevatorCount + 1)),
126
 				(elevatorIndex + 1) * Math.floor(floorCount / (elevatorCount + 1)),
135
 				(elevatorIndex + 1) * Math.floor(floorCount / (elevatorCount + 1)),
127
 				(elevatorIndex + 2) * Math.floor(floorCount / (elevatorCount + 1))
136
 				(elevatorIndex + 2) * Math.floor(floorCount / (elevatorCount + 1))
128
 			]
137
 			]
129
 
138
 
139
+			//console.log("Rest floors for elevator[" + elevatorIndex + "]: " + restFloors[0] + ", " + restFloors[1] + ", and " + restFloors[2])
140
+
130
 			elevator.on("floor_button_pressed", function(floorNum) {
141
 			elevator.on("floor_button_pressed", function(floorNum) {
131
-				console.log("> Pressed floor[" + floorNum + "] on elevator[" + elevatorIndex + "]");
142
+				//console.log("> Pressed floor[" + floorNum + "] on elevator[" + elevatorIndex + "]");
132
 				destinations.add(floorNum);
143
 				destinations.add(floorNum);
133
-				sendToNext(elevator, destinations, requests, restFloors);
134
 			});
144
 			});
135
 
145
 
136
 			// Elevator variables
146
 			// Elevator variables
137
 			let destinations = new Set();
147
 			let destinations = new Set();
138
 
148
 
139
 			// Start
149
 			// Start
140
-			setDirection(elevator, UP); // Starts on the ground floor
150
+			setDirection(elevator, IDLE); // Starts on the ground floor
141
 			console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + restFloors[0] + "]");
151
 			console.log("> Sending elevator[" + elevatorIndex + "] to floor[" + restFloors[0] + "]");
152
+
142
 			elevator.goToFloor(restFloors[0]); // Closest rest floor
153
 			elevator.goToFloor(restFloors[0]); // Closest rest floor
143
 
154
 
144
 			// Idle
155
 			// Idle
148
 				if (requests[UP].size == 0 && requests[DOWN].size == 0 && destinations.size == 0) {
159
 				if (requests[UP].size == 0 && requests[DOWN].size == 0 && destinations.size == 0) {
149
 					elevator.goToFloor(restFloors[1]);
160
 					elevator.goToFloor(restFloors[1]);
150
 				} else {
161
 				} else {
151
-					sendToNext(elevator, destinations, requests, restFloors);
162
+					sendToNext(elevators, elevatorIndex, destinations, requests, restFloors);
152
 				}
163
 				}
153
 			});
164
 			});
154
 
165
 
165
 
176
 
166
 			// Stopped
177
 			// Stopped
167
 			elevator.on("stopped_at_floor", function(floorNum) {
178
 			elevator.on("stopped_at_floor", function(floorNum) {
168
-				console.log("> elevator[" + elevatorIndex + "] stopped at floor[" + floorNum + "]");
179
+				//console.log("> elevator[" + elevatorIndex + "] stopped at floor[" + floorNum + "]");
169
 				destinations.delete(floorNum);
180
 				destinations.delete(floorNum);
170
 				requests[UP].delete(floorNum);
181
 				requests[UP].delete(floorNum);
171
 				requests[DOWN].delete(floorNum);
182
 				requests[DOWN].delete(floorNum);
172
 
183
 
173
-				sendToNext(elevator, destinations, requests, restFloors);
184
+				sendToNext(elevators, elevatorIndex, destinations, requests, restFloors);
174
 			});
185
 			});
175
 		});
186
 		});
176
 	},
187
 	},

正在加载...
取消
保存