Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions challenges.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,32 @@ var requireUserCountWithinMoves = function(userCount, moveLimit) {
};
};

var requireUserCountWithinMovesAndTime = function(userCount, moveLimit, timeLimit) {
return {
description: "Transport <span class='emphasis-color'>" + userCount + "</span> people using <span class='emphasis-color'>" + moveLimit + "</span> elevator moves or less in <span class='emphasis-color'>" + timeLimit.toFixed(0) + "</span> seconds or less",
evaluate: function(world) {
if(world.elapsedTime >= timeLimit || world.transportedCounter >= userCount || world.moveCount >= moveLimit) {
return world.elapsedTime <= timeLimit && world.transportedCounter >= userCount && world.moveCount <= moveLimit;
} else {
return null;
}
}
};
};

var requireUserCountWithinMovesAndMaxWaitTime = function(userCount, moveLimit, maxWaitTime) {
return {
description: "Transport <span class='emphasis-color'>" + userCount + "</span> people using <span class='emphasis-color'>" + moveLimit + "</span> elevator moves or less and let no one wait more than <span class='emphasis-color'>" + maxWaitTime.toFixed(1) + "</span> seconds",
evaluate: function(world) {
if(world.moveCount >= moveLimit || world.transportedCounter >= userCount || world.maxWaitTime >= maxWaitTime) {
return world.moveCount <= moveLimit && world.transportedCounter >= userCount && world.maxWaitTime <= maxWaitTime;
} else {
return null;
}
}
};
};

var requireDemo = function() {
return {
description: "Perpetual demo",
Expand Down Expand Up @@ -83,6 +109,10 @@ var challenges = [

,{options: {floorCount: 21, elevatorCount: 8, spawnRate: 1.5, elevatorCapacities: [6,8]}, condition: requireUserCountWithinTimeWithMaxWaitTime(2675, 1800, 45)}

,{options: {floorCount: 4, elevatorCount: 2, spawnRate: 1.4, elevatorCapacities: [4,4]}, condition: requireUserCountWithinMovesAndTime(40, 40, 40)}

,{options: {floorCount: 7, elevatorCount: 3, spawnRate: 1.3}, condition: requireUserCountWithinMovesAndMaxWaitTime(150, 250, 25)}

,{options: {floorCount: 21, elevatorCount: 8, spawnRate: 1.5, elevatorCapacities: [6,8]}, condition: requireDemo()}
];
/* jshint laxcomma:false */
28 changes: 28 additions & 0 deletions test/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,34 @@ describe("Elevator Saga", function() {
expect(challengeReq.evaluate(fakeWorld)).toBe(true);
});
});
describe("requireUserCountWithinMovesAndTime", function (){
it("evaluates correctly", function() {
var challengeReq = requireUserCountWithinMovesAndTime(10, 20, 30);
expect(challengeReq.evaluate(fakeWorld)).toBe(null);
fakeWorld.moveCount = 21;
expect(challengeReq.evaluate(fakeWorld)).toBe(false);
fakeWorld.transportedCounter = 15;
expect(challengeReq.evaluate(fakeWorld)).toBe(false);
fakeWorld.elapsedTime = 29.2;
expect(challengeReq.evaluate(fakeWorld)).toBe(false);
fakeWorld.moveCount = 20;
expect(challengeReq.evaluate(fakeWorld)).toBe(true);
});
});
describe("requireUserCountWithinMovesAndMaxWaitTime", function (){
it("evaluates correctly", function() {
var challengeReq = requireUserCountWithinMovesAndMaxWaitTime(150, 250, 25);
expect(challengeReq.evaluate(fakeWorld)).toBe(null);
fakeWorld.moveCount = 251;
expect(challengeReq.evaluate(fakeWorld)).toBe(false);
fakeWorld.transportedCounter = 151;
expect(challengeReq.evaluate(fakeWorld)).toBe(false);
fakeWorld.maxWaitTime = 13.9;
expect(challengeReq.evaluate(fakeWorld)).toBe(false);
fakeWorld.moveCount = 250;
expect(challengeReq.evaluate(fakeWorld)).toBe(true);
});
});
describe("requireUserCountWithinTimeWithMaxWaitTime", function(){
it("evaluates correctly", function() {
var challengeReq = requireUserCountWithinTimeWithMaxWaitTime(10, 5.0, 4.0);
Expand Down