Skip to content

Instantly share code, notes, and snippets.

@youhey
Created February 20, 2017 06:28
Show Gist options
  • Save youhey/ea67cb5ff38861305fb840f934efd023 to your computer and use it in GitHub Desktop.
Save youhey/ea67cb5ff38861305fb840f934efd023 to your computer and use it in GitHub Desktop.
Elo rating
<?php
const K = 4;
const Z = 400;
$rating_a = 1200.0;
$rating_b = 1500.0;
$win = function ($r, $e) {
return sprintf('%.2F', round($r + (K * (1 - $e)), 2));
};
$lose = function ($r, $e) {
return sprintf('%.2F', round($r + (K * (0 - $e)), 2));
};
$draw = function ($r, $e) {
return sprintf('%.2F', round($r + (K * (0.5 - $e)), 2));
};
$winning_per_average_a = 1 / (1 + (10 ** (($rating_b - $rating_a) / Z)));
$winning_per_average_b = 1 / (1 + (10 ** (($rating_a - $rating_b) / Z)));
echo "A:\n"
. sprintf(" before-rating=%.5F\n", $rating_a)
. sprintf(" win=%.5F\n", $win($rating_a, $winning_per_average_a))
. sprintf(" lose=%.5F\n", $lose($rating_a, $winning_per_average_a))
. sprintf(" draw=%.5F\n", $draw($rating_a, $winning_per_average_a))
. "\n"
. "B:\n"
. sprintf(" before-rating=%.5F\n", $rating_b)
. sprintf(" win=%.5F\n", $win($rating_b, $winning_per_average_b))
. sprintf(" lose=%.5F\n", $lose($rating_b, $winning_per_average_b))
. sprintf(" draw=%.5F\n", $draw($rating_b, $winning_per_average_b));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment