Skip to content

Instantly share code, notes, and snippets.

@decs
Created January 18, 2013 22:22
Show Gist options
  • Save decs/4569171 to your computer and use it in GitHub Desktop.
Save decs/4569171 to your computer and use it in GitHub Desktop.
var _ = require('underscore');
var request = require('request');
var json = 'http://globoesporte.globo.com/dynamo/futebol/campeonato/campeonato-brasileiro/brasileirao2012/classificacao.json';
var tabela = [];
var resultado = function (placar) {
if (placar.mandante == placar.visitante)
return 0.5;
return placar.mandante > placar.visitante ? 1 : 0;
}
var elo = function (mandante, visitante, placar, rodada) {
var k = rodada <= 5 ? 25 : 15;
var diff = tabela[visitante] - tabela[mandante];
var ea = 1 / (1 + Math.pow(10, diff / 400));
var eb = 1 / (1 + Math.pow(10, -diff / 400));
var res = resultado(placar);
tabela[mandante] += k * (res - ea);
tabela[visitante] += k * (1 - res - eb);
}
request.get(json, function (err, res, body) {
if (res.headers['content-type'].indexOf('application/json') >= 0) {
if (res.statusCode == 200) {
var campeonato = JSON.parse(body).lista_de_jogos.campeonato.edicao_campeonato;
_.chain(campeonato.equipes).each(function (time) {
tabela[time.nome_popular] = 1600;
});
_.chain(campeonato.fases[0].jogos).filter(function (partida) {
return partida.placar_mandante != null;
}).map(function (partida) {
return {
mandante: partida.nome_popular_mandante,
visitante: partida.nome_popular_visitante,
placar: {
mandante: partida.placar_mandante,
visitante: partida.placar_visitante
},
rodada: partida.rodada
};
}).each(function (partida) {
elo(partida.mandante, partida.visitante, partida.placar, partida.rodada);
});
var pos = 1;
_.chain(tabela).keys().sortBy(function (time) {
return -tabela[time];
}).each(function (time) {
console.log(pos + '. ' + time + ' (' + Math.round(tabela[time]) + 'pts)');
pos++;
});
}
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment