Skip to content

Instantly share code, notes, and snippets.

@shturm
Last active August 29, 2015 14:18
Show Gist options
  • Save shturm/993a1982b512d95f780e to your computer and use it in GitHub Desktop.
Save shturm/993a1982b512d95f780e to your computer and use it in GitHub Desktop.
function problem4(input) {
var matches = [],
players = [];
// create matches from input
for (var i = input.length - 1; i >= 0; i--) {
var line = input[i];
var match = {
playerA: getFirstPlayer(line),
playerB: getSecondPlayer(line),
score: getScore(line),
result: null,
};
match.result = getMatchResult(match);
matches.push(match);
};
// create players from matches
var playerNames = getPlayersNames(matches);
for (var i = playerNames.length - 1; i >= 0; i--) {
var playerName = playerNames[i];
var player = {
name: playerName,
matchesWon: getPlayerMatchesWon(playerName, matches),
setsWon: getPlayerSetsWon(playerName, matches),
gamesWon: getPlayerGamesWon(playerName, matches)
};
players.push(player);
};
// sort players by matches, sets, games and name
players.sort(comparePlayers);
// console.log(players);
console.log(JSON.stringify(players));
// for (var i = 0; i < players.length; i++) {
// console.log(JSON.stringify(players[i]));
// };
};
var comparePlayers = function (a, b) {
if (a.matchesWon > b.matchesWon) return -1;
if (a.matchesWon < b.matchesWon) return 1;
if (a.matchesWon == b.matchesWon) {
if (a.setsWon > b.setsWon) return -1;
if (a.setsWon < b.setsWon) return 1;
if (a.setsWon == b.setsWon) {
if (a.gamesWon > b.gamesWon) return -1;
if (a.gamesWon < b.gamesWon) return 1;
if (a.gamesWon == b.gamesWon) {
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
}
}
}
}
var getPlayersNames = function (matches) {
var players = [];
for (var i = matches.length - 1; i >= 0; i--) {
var match = matches[i];
if (players.indexOf(match.playerA) === -1) {
players.push(match.playerA);
}
if (players.indexOf(match.playerB) === -1) {
players.push(match.playerB);
}
};
return players;
}
var getFirstPlayer = function (line) {
var matched = line.match(/^\s*(\w+)\s*(\w+)/);
return matched[1] +' '+ matched[2];
};
var getSecondPlayer = function (line) {
var matched = line.match(/\.\s*(\w+)\s+(\w+)/);
return matched[1] +' '+ matched[2];
}
var getScore = function (line) {
var matched = line.match(/\d+-\d+/g);
return matched;
}
var getMatchResult = function (match) {
var aSets = 0;
var bSets = 0;
for (var i = match.score.length - 1; i >= 0; i--) {
var set = match.score[i];
var setResult = getSetResult(set);
if (setResult === -1) bSets++;
if (setResult === 1) aSets++;
};
if (aSets > bSets) return 1;
if (aSets < bSets) return -1;
}
var getSetResult = function (set) {
var split = set.split('-');
var a = parseInt(split[0]);
var b = parseInt(split[1]);
if (a < b) return -1;
if (a > b) return 1;
};
var getPlayerMatchGamesWon = function (playerName, match) {
var setsWon = 0;
for (var i = match.score.length - 1; i >= 0; i--) {
var set = match.score[i];
var setResult = getSetResult(set);
if (setResult === 1 && match.playerA === playerName) {
setsWon += parseInt(set.split('-')[0]);
}
if (setResult === -1 && match.playerB === playerName) {
setsWon += parseInt(set.split('-')[1]);
}
};
return setsWon;
}
var getPlayerMatchesWon = function (playerName, matches) {
var matchesWon = 0;
for (var i = matches.length - 1; i >= 0; i--) {
var match = matches[i];
if (match.playerA === playerName && match.result === 1) {
matchesWon++
};
if (match.playerB === playerName && match.result === -1) {
matchesWon++
};
};
return matchesWon;
}
var getPlayerMatchSetsWon = function (playerName, match) {
var matchSetsWon = 0;
for (var i = match.score.length - 1; i >= 0; i--) {
var set = match.score[i];
var setResult = getSetResult(set);
if (setResult == 1 && playerName == match.playerA) {
matchSetsWon++;
};
if (setResult == -1 && playerName == match.playerB) {
matchSetsWon++;
};
};
return matchSetsWon;
}
var getPlayerSetsWon = function (playerName, matches) {
var setsWon = 0;
for (var i = matches.length - 1; i >= 0; i--) {
var match = matches[i];
var matchSetsWon = getPlayerMatchSetsWon(playerName, match);
setsWon += matchSetsWon;
};
return setsWon;
}
var getPlayerGamesWon = function (playerName, matches) {
var gamesWon = 0;
for (var i = matches.length - 1; i >= 0; i--) {
var match = matches[i];
var matchGamesWon = getPlayerMatchGamesWon(playerName, match);
gamesWon += matchGamesWon;
};
return gamesWon;
}
var input = [
'Novak Djokovic vs. Roger Federer : 6-3 6-3',
'Roger Federer vs. Novak Djokovic : 6-2 6-3',
'Rafael Nadal vs. Andy Murray : 4-6 6-2 5-7',
'Andy Murray vs. David Ferrer : 6-4 7-6',
'Tomas Bedrych vs. Kei Nishikori : 4-6 6-4 6-3 4-6 5-7',
'Grigor Dimitrov vs. Milos Raonic : 6-3 4-6 7-6 6-2',
'Pete Sampras vs. Andre Agassi : 2-1',
'Boris Beckervs.Andre Agassi:2-1'
];
problem4(input);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment