]> git.sesse.net Git - remoteglot-book/commitdiff
Move stats derivation out into its own function.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 29 May 2016 16:20:12 +0000 (18:20 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 29 May 2016 16:20:12 +0000 (18:20 +0200)
www/js/book.js

index 1284e8fc3da1a18cc6e6ca2ff9b49fc24336494d..c0227d4646665b8a548e602504e50156c3f30043 100644 (file)
@@ -163,6 +163,8 @@ var show_lines = function(data, game) {
                var move = moves[i];
                var line = [];
 
+               var derived = calc_move_derived_data(move, total_num, data, (move_override % 2 == 0));
+
                var white = move['white'];
                var draw = move['draw'];
                var black = move['black'];
@@ -170,45 +172,31 @@ var show_lines = function(data, game) {
 
                line.push(move['move']);  // Move.
                transpose_only.push(move['transpose_only']);
-               var num = white + draw + black;
-               line.push(num);  // N.
-               line.push(num / total_num);  // %.
+               line.push(derived['num']);  // N.
+               line.push(derived['fraction']);  // %.
                line.push(computer);  // CGames.
+               line.push(derived['human_index']);  // Hum.
+               line.push(derived['win_ratio']);  // Win%.
 
-               // Adjust so that the human index is 50% overall.
-               var exp = Math.log(0.5) / Math.log(data['computer_games'] / data['total_games']);
-               line.push(1.0 - Math.pow(computer / num, exp));  // Hum.
-
-               // Win%.
-               var white_win_ratio = (white + 0.5 * draw) / num;
-               var win_ratio = (move_override % 2 == 0) ? white_win_ratio : 1.0 - white_win_ratio;
-               line.push(win_ratio);
-
-               line.push(white);        // WWin.
-               line.push(white / num);  // %WW.
-               line.push(black);        // BWin.
-               line.push(black / num);  // %BW.
-               line.push(draw);         // Draw.
-               line.push(draw / num);   // %Draw.
+               line.push(white);                   // WWin.
+               line.push(white / derived['num']);  // %WW.
+               line.push(black);                   // BWin.
+               line.push(black / derived['num']);  // %BW.
+               line.push(draw);                    // Draw.
+               line.push(draw / derived['num']);   // %Draw.
 
                if (move['num_elo'] >= 10) {
                        // Elo.
                        line.push(move['white_avg_elo']);
                        line.push(move['black_avg_elo']);
                        line.push(move['white_avg_elo'] - move['black_avg_elo']);
-
-                       // Win% corrected for Elo.
-                       var win_elo = -400.0 * Math.log(1.0 / white_win_ratio - 1.0) / Math.LN10;
-                       win_elo -= (move['white_avg_elo'] - move['black_avg_elo']);
-                       white_win_ratio = 1.0 / (1.0 + Math.pow(10, win_elo / -400.0));
-                       win_ratio = (move_override % 2 == 0) ? white_win_ratio : 1.0 - white_win_ratio;
-                       line.push(win_ratio);
                } else {
                        line.push(null);
                        line.push(null);
                        line.push(null);
-                       line.push(null);
                }
+
+               line.push(derived['corrected_win_ratio'] || null);
                lines.push(line);
        }
 
@@ -284,6 +272,38 @@ var find_total_games = function(moves) {
        return total_num;
 }
 
+var calc_move_derived_data = function(move, total_num, data, is_white) {
+       var derived = {};
+       var white = move['white'];
+       var draw = move['draw'];
+       var black = move['black'];
+       var computer = move['computer'];
+
+       var num = white + draw + black;
+       derived['num'] = num;
+       derived['fraction'] = num / total_num;
+
+       // Adjust so that the human index is 50% overall.
+       var exp = Math.log(0.5) / Math.log(data['computer_games'] / data['total_games']);
+       derived['human_index'] = 1.0 - Math.pow(computer / num, exp);
+
+       // Win%.
+       var white_win_ratio = (white + 0.5 * draw) / num;
+       var win_ratio = is_white ? white_win_ratio : 1.0 - white_win_ratio;
+       derived['win_ratio'] = win_ratio;
+
+       if (move['num_elo'] >= 10) {
+               // Win% corrected for Elo.
+               var win_elo = -400.0 * Math.log(1.0 / white_win_ratio - 1.0) / Math.LN10;
+               win_elo -= (move['white_avg_elo'] - move['black_avg_elo']);
+               white_win_ratio = 1.0 / (1.0 + Math.pow(10, win_elo / -400.0));
+               win_ratio = is_white ? white_win_ratio : 1.0 - white_win_ratio;
+               derived['corrected_win_ratio'] = win_ratio;
+       }
+
+       return derived;
+};
+
 var set_includetransp = function(value) {
        includetransp = value;
        update();