]> git.sesse.net Git - foosball/blobdiff - foosrank.cpp
Centralize rounding decisions, so we round symmetrically.
[foosball] / foosrank.cpp
index cae1dc39382c7fabfb554753204146a7d440c422..cc660764762885eacd62abf9362e7b7cca54e3c3 100644 (file)
@@ -488,7 +488,7 @@ int main(int argc, char **argv)
        double mu2 = atof(argv[3]);
        double sigma2 = atof(argv[4]);
 
-       if (argc > 8) {
+       if (argc > 10) {
                double mu3 = atof(argv[5]);
                double sigma3 = atof(argv[6]);
                double mu4 = atof(argv[7]);
@@ -498,6 +498,36 @@ int main(int argc, char **argv)
                double mu, sigma;
                compute_new_double_rating(mu1, sigma1, mu2, sigma2, mu3, sigma3, mu4, sigma4, score1, score2, mu, sigma);
                printf("%f %f\n", mu, sigma);
+       } else if (argc > 8) {
+               double mu3 = atof(argv[5]);
+               double sigma3 = atof(argv[6]);
+               double mu4 = atof(argv[7]);
+               double sigma4 = atof(argv[8]);
+               int k = atoi(argv[9]);
+               
+               // assess all possible scores
+               for (int i = 0; i < k; ++i) {
+                       double newmu1_1, newmu1_2, newmu2_1, newmu2_2;
+                       double newsigma1_1, newsigma1_2, newsigma2_1, newsigma2_2;
+                       compute_new_double_rating(mu1, sigma1, mu2, sigma2, mu3, sigma3, mu4, sigma4, k, i, newmu1_1, newsigma1_1);
+                       compute_new_double_rating(mu2, sigma2, mu1, sigma1, mu3, sigma3, mu4, sigma4, k, i, newmu1_2, newsigma1_2);
+                       compute_new_double_rating(mu3, sigma3, mu4, sigma4, mu1, sigma1, mu2, sigma2, i, k, newmu2_1, newsigma2_1);
+                       compute_new_double_rating(mu4, sigma4, mu3, sigma3, mu1, sigma1, mu2, sigma2, i, k, newmu2_2, newsigma2_2);
+                       printf("%u-%u,%f,%+f,%+f,%+f,%+f\n",
+                               k, i, prob_score(k, i, mu3+mu4-(mu1+mu2)), newmu1_1-mu1, newmu1_2-mu2,
+                               newmu2_1-mu3, newmu2_2-mu4);
+               }
+               for (int i = k; i --> 0; ) {
+                       double newmu1_1, newmu1_2, newmu2_1, newmu2_2;
+                       double newsigma1_1, newsigma1_2, newsigma2_1, newsigma2_2;
+                       compute_new_double_rating(mu1, sigma1, mu2, sigma2, mu3, sigma3, mu4, sigma4, i, k, newmu1_1, newsigma1_1);
+                       compute_new_double_rating(mu2, sigma2, mu1, sigma1, mu3, sigma3, mu4, sigma4, i, k, newmu1_2, newsigma1_2);
+                       compute_new_double_rating(mu3, sigma3, mu4, sigma4, mu1, sigma1, mu2, sigma2, k, i, newmu2_1, newsigma2_1);
+                       compute_new_double_rating(mu4, sigma4, mu3, sigma3, mu1, sigma1, mu2, sigma2, k, i, newmu2_2, newsigma2_2);
+                       printf("%u-%u,%f,%+f,%+f,%+f,%+f\n",
+                               i, k, prob_score(k, i, mu1+mu2-(mu3+mu4)), newmu1_1-mu1, newmu1_2-mu2,
+                               newmu2_1-mu3, newmu2_2-mu4);
+               }
        } else if (argc > 6) {
                int score1 = atoi(argv[5]);
                int score2 = atoi(argv[6]);