# HG changeset patch # User Oleksandr Gavenko # Date 1411570754 -10800 # Node ID 4cc0421184ac8ec7b0716d939762892df92b74de # Parent e634761d04327dcd00777dcbdbca2a216263b97f Don't store intermediate statistic data. diff -r e634761d0432 -r 4cc0421184ac 2048.html --- a/2048.html Wed Sep 24 15:25:11 2014 +0300 +++ b/2048.html Wed Sep 24 17:59:14 2014 +0300 @@ -803,7 +803,10 @@ ui.report.stat = function() { /* console.profile(); */ - var stats = []; + var scoreChecked = document.getElementById('report-score').checked; + var turnChecked = document.getElementById('report-turn').checked; + var speedChecked = document.getElementById('report-speed').checked; + var histo = {}; var cnt = parseInt(document.getElementById('stat-count-limit').value); if (isNaN(cnt) || !isFinite(cnt) || cnt < 1) cnt = 100; @@ -836,39 +839,33 @@ } var tsTo = new Date().getTime(); var stat = board.score(brd); - stat.turn = turn; - stat.ts = tsTo - tsFrom; - stats.push(stat); + var speed = turn*1000/(tsTo - tsFrom); + var score = stat.score; + var max = stat.max; + if ( ! histo[max]) { + histo[max] = { n: 1, minSpeed: speed, meanSpeed: speed, maxSpeed: speed, minTurn: turn, meanTurn: turn, maxTurn: turn, minScore: score, meanScore: score, maxScore: score }; + } else { + var row = histo[max]; + row.n++; + if (scoreChecked) { + row.minScore = Math.min(row.minScore, score); + row.meanScore += score; + row.maxScore = Math.max(row.maxScore, score); + } + if (speedChecked) { + row.minSpeed = Math.min(row.minSpeed, speed); + row.meanSpeed += speed; + row.maxSpeed = Math.max(row.maxSpeed, speed); + } + if (turnChecked) { + row.minTurn = Math.min(row.minTurn, turn); + row.meanTurn += turn; + row.maxTurn = Math.max(row.maxTurn, turn); + } + } if (tsTo - tsLimitFrom >= tsLimit) break; } - var scoreChecked = document.getElementById('report-score').checked; - var turnChecked = document.getElementById('report-turn').checked; - var speedChecked = document.getElementById('report-speed').checked; - var histo = {}; - for (i = stats.length-1; i >= 0; i--) { - var stat = stats[i]; - if ( ! histo[stat.max]) - histo[stat.max] = { n: 0, minSpeed: Infinity, meanSpeed: 0, maxSpeed: 0, minTurn: Infinity, meanTurn: 0, maxTurn: 0, minScore: Infinity, meanScore: 0, maxScore: 0 }; - var row = histo[stat.max]; - row.n++; - if (scoreChecked) { - row.minScore = Math.min(row.minScore, stat.score); - row.meanScore += stat.score; - row.maxScore = Math.max(row.maxScore, stat.score); - } - if (turnChecked) { - row.minTurn = Math.min(row.minTurn, stat.turn); - row.meanTurn += stat.turn; - row.maxTurn = Math.max(row.maxTurn, stat.turn); - } - if (speedChecked) { - var speed = (stat.turn * 1000.0) / stat.ts; - row.minSpeed = Math.min(row.minSpeed, speed); - row.meanSpeed += speed; - row.maxSpeed = Math.max(row.maxSpeed, speed); - } - } for (var i in histo) { var row = histo[i]; var n = row.n;