-
Notifications
You must be signed in to change notification settings - Fork 0
/
code.js
97 lines (81 loc) · 3.36 KB
/
code.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
// http://play.elevatorsaga.com/#challenge=5
aa = {
init: function (elevators, floors) {
var maxFloor = 4;
function getClosestFloor(currentFloor, queue) {
var minDistance,
best;
queue.forEach(function (floor) {
var distance = Math.abs(floor - currentFloor);
if (!minDistance || distance < minDistance) {
best = floor;
minDistance = distance;
}
});
return best;
}
function findNearestElevator(floorNum) {
var minDistance,
best;
elevators.forEach(function (elevator) {
var distance = Math.abs(floorNum - elevator.currentFloor());
if (!minDistance || distance < minDistance) {
best = elevator;
minDistance = distance;
}
});
return best;
}
floors.forEach(function (floor) {
var floorNum = floor.floorNum();
floor.on("up_button_pressed", function () {
var designated = findNearestElevator(floorNum);
var queue = designated.destinationQueue || [];
designated.destinationQueue.push(floorNum);
designated.checkDestinationQueue();
});
floor.on("down_button_pressed", function () {
var designated = findNearestElevator(floorNum);
var queue = designated.destinationQueue || [];
designated.destinationQueue.push(floorNum);
designated.checkDestinationQueue();
});
});
elevators.forEach(manageElevator);
function manageElevator(elevator) {
elevator.direction = function (direction) {
if (direction === "up") {
elevator.goingUpIndicator(true);
elevator.goingDownIndicator(false);
} else if (direction === "down") {
elevator.goingUpIndicator(false);
elevator.goingDownIndicator(true);
} else if (direction === "any") {
elevator.goingUpIndicator(true);
elevator.goingDownIndicator(true);
} else if (direction) {
elevator.goingUpIndicator(false);
elevator.goingDownIndicator(false);
}
if (elevator.goingUpIndicator() && !elevator.goingDownIndicator()) {
return "up";
} else if (!elevator.goingUpIndicator() && elevator.goingDownIndicator()) {
return "down";
} else if (elevator.goingUpIndicator() && elevator.goingDownIndicator()) {
return "any";
}
};
elevator.on("idle", function () {
console.log("hola");
if (elevator.getPressedFloors().length > 0) {
var nextFloor = getClosestFloor(elevator.currentFloor(), elevator.getPressedFloors());
designated.destinationQueue.push(nextFloor);
designated.checkDestinationQueue();
}
});
}
},
update: function (dt, elevators, floors) {
// We normally don't need to do anything here
}
}