I am writing a web app that needs to be able to generate tournament schedules and brackets. When setting up initial pool play games, the current implementation I have will work correctly 50-75% of the time. But occasionally it will get stuck in an infinite loop because it will never randomly select the last seed needed.
e.g. if the only team left is team #5 that needs to be scheduled into the last game as the opponent, the random number generator will give me every possible option except seed number 5 which would be a seed of 4 for some reason.
Some of the code has been obfuscated obviously at this point in trying to pinpoint the source of my error but as of yet it has been to no avail, so thus my coming here.
Code:
teamPoolScheduled = [];
index = 0;
while (index < tournyTeams.length) {
teamPoolScheduled[index] = [tournyTeams[index], 0];
index++;
}
gamesScheduled = [];
var randomSeed = 0;
index = 0;
index2 = 0;
var index3 = 0;
var tempTeam1 = "";
var tempTeam2 = "";
var shouldAdd = true;
var index4 = 0;
var breakLoop = true;
while (index < parseInt(numPoolGames.innerHTML)) {
randomSeed = Math.floor(Math.random() * tournyTeams.length);
if (gamesScheduled[index] !== undefined && gamesScheduled[index].indexOf(tournyTeams[randomSeed]) >= 0) {
continue;
} else {
if (teamPoolScheduled[randomSeed][1] < tournyPoolGames.value) {
console.log("---------also here--------");
if (gamesScheduled[index] === undefined) {
gamesScheduled[index] = [];
} else {
index3 = 0;
tempTeam1 = gamesScheduled[index][0];
tempTeam2 = tournyTeams[randomSeed];
shouldAdd = true;
while (index3 < gamesScheduled.length) {
if ((gamesScheduled[index3][0] == tempTeam1 && gamesScheduled[index3][1] == tempTeam2) || (gamesScheduled[index3][1] == tempTeam1 && gamesScheduled[index3][0] == tempTeam2)) {
shouldAdd = false;
break;
}
index3++;
}
if (!shouldAdd) {
continue;
}
}
if (shouldAdd) {
gamesScheduled[index][index2] = tournyTeams[randomSeed];
teamPoolScheduled[randomSeed][1] += 1;
if (index2 == 1) {
index2 = 0;
index++;
} else {
index2++;
}
}
} else {
console.log("Here seed: " + randomSeed);
index4 = 0;
breakLoop = true;
while (index4 < teamPoolScheduled.length) {
if (teamPoolScheduled[index4][1] != tournyPoolGames.value) {
breakLoop = false;
console.log(teamPoolScheduled[index4] + " index4: " + index4);
break;
}
index4++;
}
if (breakLoop) {
break;
}
}
}
}
The console log for one that executes correctly looks like this
---------also here--------
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team1,2 index4: 0
4newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team2,2 index4: 1
newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team2,2 index4: 1
newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team2,2 index4: 1
newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team2,2 index4: 1
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team2,2 index4: 1
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team2,2 index4: 1
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team2,2 index4: 1
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team2,2 index4: 1
2newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 4
newTournamentScheduleController.js:171 team4,1 index4: 3
newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team4,1 index4: 3
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team4,1 index4: 3
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team4,1 index4: 3
newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 4
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 4
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 4
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 4
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 4
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 9
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 9
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 9
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 9
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team4,2 index4: 3
newTournamentScheduleController.js:135 ---------also here--------
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team7,2 index4: 6
newTournamentScheduleController.js:165 Here seed: 4
newTournamentScheduleController.js:171 team7,2 index4: 6
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team7,2 index4: 6
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team7,2 index4: 6
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team7,2 index4: 6
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team7,2 index4: 6
newTournamentScheduleController.js:135 ---------also here--------
and a portion of the infinite looping console log looks like this with thousands of lines more continuing onward in the same fashion and never hitting the --------also here------ log message.
Here seed: 9
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 6
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 6
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 3
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 3
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 3
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 6
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 9
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 9
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 0
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 7
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 6
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 5
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 6
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 1
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 8
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 9
newTournamentScheduleController.js:171 team5,2 index4: 4
newTournamentScheduleController.js:165 Here seed: 2
newTournamentScheduleController.js:171 team5,2 index4: 4
any help with an error in my syntax or logic or with known issues with the javascript math.random function would be greatly appreciated. Please ask if I can provide any additional details that could be beneficial.