ball clock
by Bryson Murray
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="clockFrame">
<div id="inputs">
<div class="inputLine">
<label>Number of Balls</label>
<input id="ballCount">
<button id="method1">Method 1</button>
</div>
<div class="inputLine">
<label>Number of Min to Run Clock</label>
<input id="runTime">
<button id="method2">Method 2</button>
</div>
</div>
<div id="output"></div>
<div id="error"></div>
</div>
CSS
#clockFrame{
width: 500px;
}
#inputs{
width: 100%;
}
.inputLine{
width: 100%;
display: inline-block;
}
#error{
color: red;
}
JavaScript
function Ball(number, type) {
this.number = number;
this.type = type;
}
function BallClock(ballCount) {
this.generateBallQueue = function(ballCount){
var ballQueue = [];
for(var i = 0; i < ballCount; i++){
ballQueue.push(new Ball(i+1,"regular"));
}
return ballQueue;
}
this.totalMinRun = 0;
this.totalClockCyclesRun = 0;
this.isBallOrderInStartingOrder = true;
this.ballCount = ballCount;
this.MaxMin = 4;
this.MaxFiveMin = 11;
this.MaxHour = 12;
this.Min = [];
this.FiveMin = [];
this.Hour = [new Ball(-1,"fixed")];
this.Main = this.generateBallQueue(ballCount);
this.getNextBall = function(){
if(this.isBallOrderInStartingOrder){
this.isBallOrderInStartingOrder = false;
}
return this.Main.shift();
};
this.addBallToMin = function(curBall){
this.totalMinRun++;
if(this.Min.length === this.MaxMin){
for(var i = 0; i < this.MaxMin; i++){
this.Main.push(this.Min.pop());
}
this.addBallToFiveMin(curBall);
}
else{
this.Min.push(curBall);
}
};
this.addBallToFiveMin = function(curBall){
if(this.FiveMin.length === this.MaxFiveMin){
for(var i = 0; i < this.MaxFiveMin; i++){
this.Main.push(this.FiveMin.pop());
}
this.addBallToHour(curBall);
}
else{
this.FiveMin.push(curBall);
}
}
this.addBallToHour = function(curBall){
if(this.Hour.length === this.MaxHour){
for(var i = 0; i < this.MaxHour-1; i++){
this.Main.push(this.Hour.pop());
}
this.Main.push(curBall);
this.totalClockCyclesRun++;
this.isBallOrderBackToStartingOrder();
}
else{
this.Hour.push(curBall);
}
}
this.isBallOrderBackToStartingOrder = function(){
if(this.totalClockCyclesRun > 28 &&...