Skip to content

Instantly share code, notes, and snippets.

@amad
Last active November 22, 2017 11:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amad/9730c07ea4f8f821cc6ab540803314e0 to your computer and use it in GitHub Desktop.
Save amad/9730c07ea4f8f821cc6ab540803314e0 to your computer and use it in GitHub Desktop.
My basic solution for elevatorsaga.com
{
init: function(elevators, floors) {
const lessMoves = false;
var upQueue = [];
var downQueue = [];
moveToFloorNum = (elevator, floorNum, force=false) => {
if (elevator.destinationQueue.includes(floorNum)) {
elevator.goToFloor(floorNum, force);
return;
}
let duplicate = false;
_.each(elevators, e => {
if (e.destinationQueue.includes(floorNum)) {
duplicate = true;
}
});
if (duplicate) {
return;
}
elevator.goToFloor(floorNum, force);
};
removeFloorFromAllQueues = floorNum => {
var uppressedIndex = upQueue.indexOf(floorNum);
if (uppressedIndex > -1) {
upQueue.splice(uppressedIndex, 1);
}
var downPressedIndex = downQueue.indexOf(floorNum);
if(downPressedIndex > -1){
downQueue.splice(downPressedIndex, 1);
}
};
_.each(elevators, elevator => {
elevator.on("floor_button_pressed", function(floorNum) {
elevator.goToFloor(floorNum);
});
elevator.on("idle", () => {
var floorNum;
if (downQueue.length > 0) {
floorNum = downQueue.pop();
} else if (upQueue.length > 0){
floorNum = upQueue.pop();
} else {
floorNum = elevator.currentFloor();
}
if (lessMoves) {
moveToFloorNum(elevator, floorNum);
} else {
elevator.goToFloor(floorNum);
}
});
elevator.on("stopped_at_floor", () => {
var floorNum = elevator.currentFloor();
var uppressedIndex = upQueue.indexOf(floorNum);
var downPressedIndex = downQueue.indexOf(floorNum);
removeFloorFromAllQueues(floorNum);
});
elevator.on("passing_floor", (floorNum, direction) => {
var uppressedIndex = upQueue.indexOf(floorNum);
var downPressedIndex = downQueue.indexOf(floorNum);
if (!elevator.destinationQueue.includes(floorNum)) {
if (elevator.loadFactor() > 0.95) {
return;
}
if ((uppressedIndex+downPressedIndex) == -2) {
return;
}
}
removeFloorFromAllQueues(floorNum);
if (lessMoves) {
moveToFloorNum(elevator, floorNum);
} else {
elevator.goToFloor(floorNum);
}
});
});
_.each(floors, function(floor) {
floor.on("up_button_pressed", () => {
upQueue.push(floor.level);
});
floor.on("down_button_pressed", () => {
downQueue.push(floor.level);
});
});
},
update: function(dt, elevators, floors) {
_.each(elevators, e => {
e.destinationQueue = Array.from(new Set(e.destinationQueue));
e.checkDestinationQueue();
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment