pcc-tournament-pairs
Version:
Tiny swiss pairing library with basic deterministic functionality
278 lines (265 loc) • 7.05 kB
JavaScript
var onePerRound = require('../index.js')({
maxPerRound: 1,
});
var twoPerRound = require('../index.js')({
maxPerRound: 1,
});
var odd = {
participants: [
{ id: 1, seed: 1050 },
{ id: 2, seed: 1000 },
{ id: 3, seed: 952 },
{ id: 4, seed: 951 },
{ id: 5, seed: 950 },
],
matches: [
{
round: 1,
home: { id: 1, points: 1 },
away: { id: 4, points: 0 },
},
{
round: 1,
home: { id: 2, points: 0.5 },
away: { id: 5, points: 0.5 },
},
{
round: 1,
home: { id: 3, points: 1 },
away: { id: null, points: 0 },
},
{
round: 2,
home: { id: 5, points: 0.5 },
away: { id: 1, points: 0.5 },
},
{
round: 2,
home: { id: 2, points: 1 },
away: { id: 3, points: 0 },
},
{
round: 2,
home: { id: 4, points: 1 },
away: { id: null, points: 0 },
},
{
round: 3,
home: { id: 1, points: 0 },
away: { id: 2, points: 1 },
},
{
round: 3,
home: { id: 3, points: 1 },
away: { id: 4, points: 0 },
},
{
round: 3,
home: { id: 5, points: 1 },
away: { id: null, points: 0 },
},
// 1: 2 , 2: 1, 3: 1, 4: 1, 5:1
],
};
var even = {
participants: [
{ id: 'ID 1', seed: 700 },
{ id: 'ID 2', seed: 625 },
{ id: 'ID 3', seed: 950 },
{ id: 'ID 4', seed: 800 },
],
matches: [
{
round: 1,
home: { id: 'ID 3', points: 1 },
away: { id: 'ID 4', points: 0 },
},
{
round: 1,
home: { id: 'ID 1', points: 0 },
away: { id: 'ID 2', points: 1 },
},
// 1: 0, 2: 1, 3: 1, 4:0
{
round: 2,
home: { id: 'ID 3', points: 1 },
away: { id: 'ID 2', points: 0 },
},
{
round: 2,
home: { id: 'ID 4', points: 0 },
away: { id: 'ID 1', points: 1 },
},
// 1: 1, 2: 1, 3: 2, 4:0
],
};
var byeTest = {
participants: [
{ id: 'Team 1', seed: 3636, disbanded: false, droppedOut: false },
{ id: 'Team 2', seed: 4001, disbanded: false, droppedOut: false },
{ id: 'Team 3', seed: 4001, disbanded: false, droppedOut: false },
{ id: 'Team 4', seed: 4011, disbanded: false, droppedOut: false },
{ id: 'Team 5', seed: 4029, disbanded: false, droppedOut: false },
{ id: 'Team 6', seed: 4030, disbanded: false, droppedOut: false },
{ id: 'Team 7', seed: 4043, disbanded: false, droppedOut: false },
{ id: 'Team 8', seed: 4044, disbanded: false, droppedOut: false },
{ id: 'Team 9', seed: 4066, disbanded: false, droppedOut: false },
{ id: 'Team 10', seed: 4142, disbanded: false, droppedOut: false },
{ id: 'Team 11', seed: 4174, disbanded: false, droppedOut: false },
{ id: 'Team 12', seed: 4179, disbanded: false, droppedOut: false },
{ id: 'Team 13', seed: 4183, disbanded: false, droppedOut: false },
{ id: 'Team 14', seed: 4194, disbanded: false, droppedOut: false },
{ id: 'Team 15', seed: 4199, disbanded: false, droppedOut: false },
{ id: 'Team 16', seed: 4209, disbanded: false, droppedOut: false },
{ id: 'Team 17', seed: 4233, disbanded: false, droppedOut: false },
{ id: 'Team 18', seed: 4270, disbanded: false, droppedOut: false },
{ id: 'Team 19', seed: 4362, disbanded: false, droppedOut: false },
],
matches: [
{
round: 1,
home: { id: 'Team 19', points: 1 },
away: { id: 'Team 17', points: 1 },
},
{
round: 1,
home: { id: 'Team 18', points: 0 },
away: { id: 'Team 14', points: 2 },
},
{
round: 1,
home: { id: 'Team 15', points: 1 },
away: { id: 'Team 13', points: 1 },
},
{
round: 1,
home: { id: 'Team 11', points: 1 },
away: { id: 'Team 10', points: 1 },
},
{
round: 1,
home: { id: 'Team 16', points: 1 },
away: { id: 'Team 7', points: 1 },
},
{
round: 1,
home: { id: 'Team 9', points: 1 },
away: { id: 'Team 4', points: 1 },
},
{
round: 1,
home: { id: 'Team 8', points: 2 },
away: { id: 'Team 6', points: 0 },
},
{
round: 1,
home: { id: 'Team 2', points: 0 },
away: { id: 'Team 3', points: 2 },
},
{
round: 1,
home: { id: 'Team 5', points: 1 },
away: { id: 'Team 1', points: 1 },
},
{
round: 1,
home: { id: 'Team 12', points: 2 },
away: { id: null, points: 0 },
},
{
round: 2,
home: { id: 'Team 7', points: 2 },
away: { id: 'Team 19', points: 0 },
},
{
round: 2,
home: { id: 'Team 10', points: 1 },
away: { id: 'Team 17', points: 1 },
},
{
round: 2,
home: { id: 'Team 11', points: 2 },
away: { id: 'Team 15', points: 0 },
},
{
round: 2,
home: { id: 'Team 9', points: 1 },
away: { id: 'Team 18', points: 1 },
},
{
round: 2,
home: { id: 'Team 14', points: 2 },
away: { id: 'Team 8', points: 0 },
},
{
round: 2,
home: { id: 'Team 16', points: 0 },
away: { id: 'Team 4', points: 2 },
},
{
round: 2,
home: { id: 'Team 6', points: 1 },
away: { id: 'Team 12', points: 1 },
},
{
round: 2,
home: { id: 'Team 3', points: 1 },
away: { id: 'Team 5', points: 1 },
},
{
round: 2,
home: { id: 'Team 13', points: 2 },
away: { id: 'Team 1', points: 0 },
},
{
round: 2,
home: { id: 'Team 2', points: 2 },
away: { id: null, points: 0 },
},
],
};
// var oddMatchups = onePerRound.getMatchups(3, odd.participants, odd.matches);
// console.log(oddMatchups);
// var evenMatchups = onePerRound.getMatchups(3, even.participants, even.matches);
// console.log(evenMatchups);
// var byeMatchups = twoPerRound.getMatchups(
// 3,
// byeTest.participants,
// byeTest.matches
// );
// console.log(byeMatchups);
// var oddModifiedMedian = twoPerRound.getModifiedMedianScores(
// 2,
// odd.participants,
// odd.matches
// );
// var evenModifiedMedian = onePerRound.getModifiedMedianScores(
// 3,
// even.participants,
// even.matches
// );
var oddStandings = onePerRound.getStandings(4, odd.participants, odd.matches);
console.log(oddStandings);
// var evenStandings = onePerRound.getStandings(
// 3,
// even.participants,
// even.matches
// );
// if (Object.entries(oddModifiedMedian).length !== 3) {
// throw new Error('getModifiedMedian incorrect for odd data');
// }
// if (Object.entries(evenModifiedMedian).length !== 4) {
// throw new Error('getModifiedMedian incorrect for even data');
// }
// if (oddStandings.length !== 3) {
// throw new Error('getStandings incorrect for odd data');
// }
// if (evenStandings.length !== 4) {
// throw new Error('getStandings incorrect for even data');
// }
// if (oddMatchups.length !== 2) {
// throw new Error('getStandings incorrect for odd data');
// }
// if (evenMatchups.length !== 2) {
// throw new Error('getStandings incorrect for even data');
// }