Skip to content

Instantly share code, notes, and snippets.

@jaguilar87
Last active September 8, 2022 07:50
Show Gist options
  • Save jaguilar87/f3959c7dfbe9edc8c6dded39db0f4ec4 to your computer and use it in GitHub Desktop.
Save jaguilar87/f3959c7dfbe9edc8c6dded39db0f4ec4 to your computer and use it in GitHub Desktop.
Pairing Generator
// Parameters
const players = [
"Jordi",
"Pedro",
"Pau",
"Sergio",
"Andrés",
"Antonio",
];
const nOfRounds = 5;
const gamesPerRound = 3;
// Script
let result = [];
function shuffle(a) {
for (let i = a.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[a[i], a[j]] = [a[j], a[i]];
}
return a;
}
for (let i = 0; i < nOfRounds; i++) {
let isUnique = false;
while (!isUnique) {
const buffer = [];
let series = shuffle(players);
for (let j = 0; j < gamesPerRound; j++) {
const a = series[j];
const b = series[j + gamesPerRound];
const pair = a < b ? `${a}\t${b}` : `${b}\t${a}`;
if (result.includes(pair)) {
isUnique = false;
break;
} else {
buffer.push(pair);
}
isUnique = true;
}
if (isUnique) {
console.log(buffer.join("\n"));
result = result.concat(buffer);
}
}
console.log("\n\n");
}
function onlyUnique(value, index, self) {
return self.indexOf(value) === index;
}
console.log(JSON.stringify(result));
console.log("is unique:", result.filter(onlyUnique).length === result.length);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment