Skip to content

Instantly share code, notes, and snippets.

@nhoizey
Created October 18, 2014 20:58
Show Gist options
  • Save nhoizey/f3b6efe4165fe7024e41 to your computer and use it in GitHub Desktop.
Save nhoizey/f3b6efe4165fe7024e41 to your computer and use it in GitHub Desktop.
elevato.rs
function sameDirection(floorNumber, elevator) {
var tmp = (floorNumber - elevator.nextFloor) * (elevator.nextFloor - elevator.previousFloor);
return tmp > 0;
}
// called each time someone requests an elevator
function onFloorRequest(floorNumber, elevators) {
var found = false;
for (var id = 0; id < elevators.length; id++) {
if (found) {
return;
}
console.log('Elevator #' + id);
if (typeof elevators[id].isIddle === 'undefined') {
elevators[id].isIddle = true;
}
console.log(' Iddle? ' + elevators[id].isIddle);
if (elevators[id].isIddle) {
elevators[id].moveTo(floorNumber);
elevators[id].isIddle = false;
found = true;
}
}
if (!found) {
var minReq = elevators[0].requestedAt.length,
minReqId = 0,
minDistId = -1,
id = 0;
while (id < elevators.length) {
if (sameDirection(floorNumber, elevators[id])) {
minDistId = id;
}
if (elevators[id].requestedAt.length < minReq) {
minReq = elevators[id].requestedAt.length;
minReqId = id;
}
id++;
}
if (minDistId != -1) {
elevators[minDistId].moveTo(floorNumber);
elevators[minDistId].isIddle = false;
} else {
elevators[minReqId].moveTo(floorNumber);
elevators[minReqId].isIddle = false;
}
}
}
// called each time an elevator becomes idle
function onElevatorIdle(elevator, elevators) {
if (elevator.requestedAt.length){
console.log('elevators['+elevator.id+'] still have to go to', elevator.requestedAt);
}
else{
console.log('elevators['+elevator.id+'] is now idle');
elevators[elevator.id].isIddle = true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment