Accueil > > > CALCULATEUR DE CLASSEMENT ELO
CALCULATEUR DE CLASSEMENT ELO
Information sur la source
Description
Le classement Elo est très utilisé dans le monde des échecs, du jeu de go, des jeux vidéos, bref, partout où deux adversaires peuvent s'affronter. Le but étant d'établir un classement entre les joueurs pour évaluer leur force respective et pouvoir faire jouer contre, deux entités (équipes ou joueurs), qui ne se sont jamais affrontés auparavant mais dont les forces seraient à peu près les mêmes et donc les chances de victoires similaires. Le classement Elo permet d'arriver à ce résultat.
Source
- /**
- * @fileOverview Calculateur de classement Elo et une fonction exemple "process" pour montrer comment l'utiliser.
- * @author Samuel GIFFARD a.k.a Mulugrutz
- * @version 1.0.42
- */
-
- /**
- * Le K value représente le maximum de points qu'une entité peut gagner/perdre en un match.
- * @constant
- * @type entier
- */
- var K_VALUE = 64;
-
- /**
- * La différence de classement Elo à partir de laquelle il n'est plus intéressant de jouer contre.
- * @constant
- * @type entier
- */
- var RANGE = 400;
-
- /**
- * Cette fonction sert à calculer le classement elo après un match entre
- deux entités (équipe ou joueur), en connaissant le vainqueur.
- <br>Appelée par {@link process}.
- <br>Appelle {@link elo_calculator}.
- * @param {entier} elo1 Le classement Elo de la première entité
- * @param {entier} elo2 Le classement Elo de la deuxième entité
- * @param {booléen} result Si vrai, entité 1 gagne. Si faux, entité 2 gagne.
- * @returns {Tableau Associatif JS} ('new_elo1'=>xx1,'new_elo2'=>xx2,'change1'=>yy1,'change2'=>yy2) avec:
- <br>new_elo1 {entier} First entity's new elo rating
- <br>new_elo2 {entier} Second entity's new elo rating
- <br>change1 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 1
- <br>change2 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 2
- */
- function easy_elo(elo1,elo2,result)
- {
- return elo_calculator((result?1:0),(result?0:1),elo1,elo2);
- }
-
- /**
- * Cette fonction sert à calculer le classement elo après un match entre
- deux entités (équipe ou joueur), en connaissant le score.
- <br>Appelée par {@link easy_elo} et {@link process}.
- * @param {entier} score1 Le score de la première entité
- * @param {entier} score2 Le score de la deuxième entité
- * @param {entier} elo1 Le classement Elo de la première entité
- * @param {entier} elo2 Le classement Elo de la deuxième entité
- * @returns {Tableau Associatif JS} ('new_elo1'=>xx1,'new_elo2'=>xx2,'change1'=>yy1,'change2'=>yy2) avec:
- <br>new_elo1 {entier} First entity's new elo rating
- <br>new_elo2 {entier} Second entity's new elo rating
- <br>change1 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 1
- <br>change2 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 2
- */
- function elo_calculator(score1,score2,e1,e2)
- {
- var elo1 = parseInt(e1);
- var elo2 = parseInt(e2);
- var e;
- var r = [];
- if(score1 != score2) // le match n'est pas une égalité, il existe un vainqueur
- {
- if(score1 > score2) // le vainqueur est l'entité 1
- {
- e=K_VALUE-Math.round(1/(1+Math.pow(10,((elo2-elo1)/RANGE)))*K_VALUE);
- r['new_elo1'] = elo1 + e;
- r['new_elo2'] = elo2 - e;
- }
- else // le vainqueur est l'entité 2
- {
- e=K_VALUE-Math.round(1/(1+Math.pow(10,((elo1-elo2)/RANGE)))*K_VALUE);
- r['new_elo1'] = elo1 - e;
- r['new_elo2'] = elo2 + e;
- }
- }
- else // le match est une égalité, il n'existe pas de vainqueur
- {
- if(elo1 == elo2) // les deux entités ont le même classement elo
- {
- r['new_elo1'] = elo1;
- r['new_elo2'] = elo2;
- }
- else // les deux entités n'ont pas le même classement elo
- {
- if(elo1 > elo2) // l'entité 1 a un classement elo plus élevé
- {
- e=(K_VALUE-Math.round(1/(1+Math.pow(10,((elo1-elo2)/RANGE)))*K_VALUE))-(K_VALUE-Math.round(1/(1+Math.pow(10,((elo2-elo1)/RANGE)))*K_VALUE));
- r['new_elo1'] = elo1 - e;
- r['new_elo2'] = elo2 + e;
- }
- else // l'entité 2 a un classement elo plus élevé
- {
- e=(K_VALUE-Math.round(1/(1+Math.pow(10,((elo2-elo1)/RANGE)))*K_VALUE))-(K_VALUE-Math.round(1/(1+Math.pow(10,((elo1-elo2)/RANGE)))*K_VALUE));
- r['new_elo1'] = elo1 + e;
- r['new_elo2'] = elo2 - e;
- }
- }
- }
- r['change1'] = ((r['new_elo1'] - elo1) > 0) ? ('+'+(r['new_elo1'] - elo1)) : ((r['new_elo1'] - elo1)+'');
- r['change2'] = ((r['new_elo2'] - elo2) > 0) ? ('+'+(r['new_elo2'] - elo2)) : ((r['new_elo2'] - elo2)+'');
- return r;
- }
-
- /**
- * Cette fonction est un exemple pour montrer comment utiliser le calculateur elo
- <br>Appelle {@link easy_elo} et {@link elo_calculator}.
- * @param {booléen} easy Si vrai, utilise le calculateur simplifié. Si faux, utilise le calculateur complet.
- * @returns {booléen} Pour arrêter les futurs évènements, si nécessaire.
- */
- function process(easy)
- {
- // On associe des handles aux objets HTML
- var elo1 = document.getElementById('id_elo1');
- var elo2 = document.getElementById('id_elo2');
- var score1 = document.getElementById('id_score1');
- var score2 = document.getElementById('id_score2');
- var change1 = document.getElementById('id_change1');
- var change2 = document.getElementById('id_change2');
- var new_elo1 = document.getElementById('id_new_elo1');
- var new_elo2 = document.getElementById('id_new_elo2');
- var output = document.getElementById('id_output_text');
-
- // On choisit quelle fonction sera exécutée plus tard (fermeture)
- var fnc;
- if(easy)
- {
- fnc = (function(){
- output.innerHTML = "Le calculateur simplifié a été utilisé.";
- if(score1.value != score2.value) return easy_elo(elo1.value,elo2.value,(parseInt(score1.value) > parseInt(score2.value)));
- else return false;
- });
- }
- else
- {
- fnc = (function(){
- output.innerHTML = "Le calculateur complet a été utilisé.";
- return elo_calculator(score1.value,score2.value,elo1.value,elo2.value);
- });
- }
-
- // On exécute la fonction sélectionnée et on stocke les résultats
- var r = fnc();
-
- // Si on n'a pas utilisé le calculateur simplifié alors que le match est nul
- if(r !== false)
- {
- change1.innerHTML = r['change1'];
- change2.innerHTML = r['change2'];
- new_elo1.value = r['new_elo1'];
- new_elo2.value = r['new_elo2'];
- }
- else
- {
- output.innerHTML += "<br>Le calculateur simplifié ne marche que s'il existe un vainqueur.";
- change1.innerHTML = "";
- change2.innerHTML = "";
- new_elo1.value = "";
- new_elo2.value = "";
- }
- return false;
- }
/**
* @fileOverview Calculateur de classement Elo et une fonction exemple "process" pour montrer comment l'utiliser.
* @author Samuel GIFFARD a.k.a Mulugrutz
* @version 1.0.42
*/
/**
* Le K value représente le maximum de points qu'une entité peut gagner/perdre en un match.
* @constant
* @type entier
*/
var K_VALUE = 64;
/**
* La différence de classement Elo à partir de laquelle il n'est plus intéressant de jouer contre.
* @constant
* @type entier
*/
var RANGE = 400;
/**
* Cette fonction sert à calculer le classement elo après un match entre
deux entités (équipe ou joueur), en connaissant le vainqueur.
<br>Appelée par {@link process}.
<br>Appelle {@link elo_calculator}.
* @param {entier} elo1 Le classement Elo de la première entité
* @param {entier} elo2 Le classement Elo de la deuxième entité
* @param {booléen} result Si vrai, entité 1 gagne. Si faux, entité 2 gagne.
* @returns {Tableau Associatif JS} ('new_elo1'=>xx1,'new_elo2'=>xx2,'change1'=>yy1,'change2'=>yy2) avec:
<br>new_elo1 {entier} First entity's new elo rating
<br>new_elo2 {entier} Second entity's new elo rating
<br>change1 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 1
<br>change2 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 2
*/
function easy_elo(elo1,elo2,result)
{
return elo_calculator((result?1:0),(result?0:1),elo1,elo2);
}
/**
* Cette fonction sert à calculer le classement elo après un match entre
deux entités (équipe ou joueur), en connaissant le score.
<br>Appelée par {@link easy_elo} et {@link process}.
* @param {entier} score1 Le score de la première entité
* @param {entier} score2 Le score de la deuxième entité
* @param {entier} elo1 Le classement Elo de la première entité
* @param {entier} elo2 Le classement Elo de la deuxième entité
* @returns {Tableau Associatif JS} ('new_elo1'=>xx1,'new_elo2'=>xx2,'change1'=>yy1,'change2'=>yy2) avec:
<br>new_elo1 {entier} First entity's new elo rating
<br>new_elo2 {entier} Second entity's new elo rating
<br>change1 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 1
<br>change2 {Chaîne de caractères} Le nombre de points gagnés/perdus par l'entité 2
*/
function elo_calculator(score1,score2,e1,e2)
{
var elo1 = parseInt(e1);
var elo2 = parseInt(e2);
var e;
var r = [];
if(score1 != score2) // le match n'est pas une égalité, il existe un vainqueur
{
if(score1 > score2) // le vainqueur est l'entité 1
{
e=K_VALUE-Math.round(1/(1+Math.pow(10,((elo2-elo1)/RANGE)))*K_VALUE);
r['new_elo1'] = elo1 + e;
r['new_elo2'] = elo2 - e;
}
else // le vainqueur est l'entité 2
{
e=K_VALUE-Math.round(1/(1+Math.pow(10,((elo1-elo2)/RANGE)))*K_VALUE);
r['new_elo1'] = elo1 - e;
r['new_elo2'] = elo2 + e;
}
}
else // le match est une égalité, il n'existe pas de vainqueur
{
if(elo1 == elo2) // les deux entités ont le même classement elo
{
r['new_elo1'] = elo1;
r['new_elo2'] = elo2;
}
else // les deux entités n'ont pas le même classement elo
{
if(elo1 > elo2) // l'entité 1 a un classement elo plus élevé
{
e=(K_VALUE-Math.round(1/(1+Math.pow(10,((elo1-elo2)/RANGE)))*K_VALUE))-(K_VALUE-Math.round(1/(1+Math.pow(10,((elo2-elo1)/RANGE)))*K_VALUE));
r['new_elo1'] = elo1 - e;
r['new_elo2'] = elo2 + e;
}
else // l'entité 2 a un classement elo plus élevé
{
e=(K_VALUE-Math.round(1/(1+Math.pow(10,((elo2-elo1)/RANGE)))*K_VALUE))-(K_VALUE-Math.round(1/(1+Math.pow(10,((elo1-elo2)/RANGE)))*K_VALUE));
r['new_elo1'] = elo1 + e;
r['new_elo2'] = elo2 - e;
}
}
}
r['change1'] = ((r['new_elo1'] - elo1) > 0) ? ('+'+(r['new_elo1'] - elo1)) : ((r['new_elo1'] - elo1)+'');
r['change2'] = ((r['new_elo2'] - elo2) > 0) ? ('+'+(r['new_elo2'] - elo2)) : ((r['new_elo2'] - elo2)+'');
return r;
}
/**
* Cette fonction est un exemple pour montrer comment utiliser le calculateur elo
<br>Appelle {@link easy_elo} et {@link elo_calculator}.
* @param {booléen} easy Si vrai, utilise le calculateur simplifié. Si faux, utilise le calculateur complet.
* @returns {booléen} Pour arrêter les futurs évènements, si nécessaire.
*/
function process(easy)
{
// On associe des handles aux objets HTML
var elo1 = document.getElementById('id_elo1');
var elo2 = document.getElementById('id_elo2');
var score1 = document.getElementById('id_score1');
var score2 = document.getElementById('id_score2');
var change1 = document.getElementById('id_change1');
var change2 = document.getElementById('id_change2');
var new_elo1 = document.getElementById('id_new_elo1');
var new_elo2 = document.getElementById('id_new_elo2');
var output = document.getElementById('id_output_text');
// On choisit quelle fonction sera exécutée plus tard (fermeture)
var fnc;
if(easy)
{
fnc = (function(){
output.innerHTML = "Le calculateur simplifié a été utilisé.";
if(score1.value != score2.value) return easy_elo(elo1.value,elo2.value,(parseInt(score1.value) > parseInt(score2.value)));
else return false;
});
}
else
{
fnc = (function(){
output.innerHTML = "Le calculateur complet a été utilisé.";
return elo_calculator(score1.value,score2.value,elo1.value,elo2.value);
});
}
// On exécute la fonction sélectionnée et on stocke les résultats
var r = fnc();
// Si on n'a pas utilisé le calculateur simplifié alors que le match est nul
if(r !== false)
{
change1.innerHTML = r['change1'];
change2.innerHTML = r['change2'];
new_elo1.value = r['new_elo1'];
new_elo2.value = r['new_elo2'];
}
else
{
output.innerHTML += "<br>Le calculateur simplifié ne marche que s'il existe un vainqueur.";
change1.innerHTML = "";
change2.innerHTML = "";
new_elo1.value = "";
new_elo2.value = "";
}
return false;
}
Conclusion
Cette archive zip contient 7 fichiers : elo.fr.js Le JS français test_elo.fr.html Le fichier exemple HTML 5 français LISEZMOI.txt Ce fichier elo.en.js Le JS anglais test_elo.en.html Le fichier exemple HTML 5 anglais README.txt Son homologue anglais elo_calculator.png Un capture d'écran de l'exemple
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
aide à la saisie avec un popup [ par lucsa ]
bonjour, je me met au javascript et j'ai quelque soucis.je souhaite afficher un popup si l'on click dans champ de saisie (input type=text). ce popoup
aide à la saisie avec un popup [ par lucsa ]
bonjour, je me met au javascript et j'ai quelque soucis.je souhaite afficher un popup si l'on click dans champ de saisie (input type=text). ce popoup
lecture d'un fichier sous javascript! [ par Themistocle ]
bonjour à tous!j'ai un (petit) souci, (et de grosses lacunes) en javascript.j'ai mis en ligne un site internet, sur le jeu d'échecs, et j'ar
Classement [ par Marmalade ]
Bon voila, Je ne suis pas très bon en informatique mais je veut me faire un site.J'aurais besoin d'un code html pour faire un classement au
Classement alphanumérique [ par tipouic ]
Je suis actuellement entrain de faire un gestionnaire en "hta" et j'aimerais bien faire un trie alphanumérique suivant un champ précis. Mes données so
classement derniers echanges [ par bultez ]
bonjour à toutes et à tous,je ne sais pas si ça améliorerait réellement le site, mais pouvoir classer les derniers écha
changer une partie du texte d un calque automatiquement [ par bubbledesavon ]
bonjour, je vous expose mon petit souci ,.je gere un petit site d'un club ,ou je met en permanence les classement a jour,mais le souci ,c'est que les
Confirm et Submit [ par jumano ]
Bonsoir,J'ai sur une page un fomulaire avec un champs permettat ou non de choisir un classement.Si aucun classement n'a été choisi, une fenêtre de con
Créer Tableau de classement de foot [ par mariodessuti ]
Bonjour,je suis nouveau sur ce site et je sais pas du tout où placer mon sujet.alors voilà :j'aimerais créer un classement de foot pour mon site.comme
Classement d'une liste de DIV [ par m0rdreck ]
Bonjour a tous, Je suis entrain de créer un site web, et j'aurais voulu dans mon administration faire le classement des nouveauté par exemple par le
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
UTILISER UN .JSUTILISER UN .JS par zaikoe
Cliquez pour lire la suite par zaikoe
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|