801 ui.report = {}; |
801 ui.report = {}; |
802 ui.report.statNo = 1; |
802 ui.report.statNo = 1; |
803 |
803 |
804 ui.report.stat = function() { |
804 ui.report.stat = function() { |
805 /* console.profile(); */ |
805 /* console.profile(); */ |
806 var stats = []; |
806 var scoreChecked = document.getElementById('report-score').checked; |
|
807 var turnChecked = document.getElementById('report-turn').checked; |
|
808 var speedChecked = document.getElementById('report-speed').checked; |
|
809 var histo = {}; |
807 var cnt = parseInt(document.getElementById('stat-count-limit').value); |
810 var cnt = parseInt(document.getElementById('stat-count-limit').value); |
808 if (isNaN(cnt) || !isFinite(cnt) || cnt < 1) |
811 if (isNaN(cnt) || !isFinite(cnt) || cnt < 1) |
809 cnt = 100; |
812 cnt = 100; |
810 var tsLimit = parseFloat(document.getElementById('stat-count-limit').value); |
813 var tsLimit = parseFloat(document.getElementById('stat-count-limit').value); |
811 if (isNaN(tsLimit) || !isFinite(tsLimit) || tsLimit < 1 || tsLimit > 60) |
814 if (isNaN(tsLimit) || !isFinite(tsLimit) || tsLimit < 1 || tsLimit > 60) |
834 board.putRandom(brd); |
837 board.putRandom(brd); |
835 turn++; |
838 turn++; |
836 } |
839 } |
837 var tsTo = new Date().getTime(); |
840 var tsTo = new Date().getTime(); |
838 var stat = board.score(brd); |
841 var stat = board.score(brd); |
839 stat.turn = turn; |
842 var speed = turn*1000/(tsTo - tsFrom); |
840 stat.ts = tsTo - tsFrom; |
843 var score = stat.score; |
841 stats.push(stat); |
844 var max = stat.max; |
|
845 if ( ! histo[max]) { |
|
846 histo[max] = { n: 1, minSpeed: speed, meanSpeed: speed, maxSpeed: speed, minTurn: turn, meanTurn: turn, maxTurn: turn, minScore: score, meanScore: score, maxScore: score }; |
|
847 } else { |
|
848 var row = histo[max]; |
|
849 row.n++; |
|
850 if (scoreChecked) { |
|
851 row.minScore = Math.min(row.minScore, score); |
|
852 row.meanScore += score; |
|
853 row.maxScore = Math.max(row.maxScore, score); |
|
854 } |
|
855 if (speedChecked) { |
|
856 row.minSpeed = Math.min(row.minSpeed, speed); |
|
857 row.meanSpeed += speed; |
|
858 row.maxSpeed = Math.max(row.maxSpeed, speed); |
|
859 } |
|
860 if (turnChecked) { |
|
861 row.minTurn = Math.min(row.minTurn, turn); |
|
862 row.meanTurn += turn; |
|
863 row.maxTurn = Math.max(row.maxTurn, turn); |
|
864 } |
|
865 } |
842 if (tsTo - tsLimitFrom >= tsLimit) |
866 if (tsTo - tsLimitFrom >= tsLimit) |
843 break; |
867 break; |
844 } |
|
845 var scoreChecked = document.getElementById('report-score').checked; |
|
846 var turnChecked = document.getElementById('report-turn').checked; |
|
847 var speedChecked = document.getElementById('report-speed').checked; |
|
848 var histo = {}; |
|
849 for (i = stats.length-1; i >= 0; i--) { |
|
850 var stat = stats[i]; |
|
851 if ( ! histo[stat.max]) |
|
852 histo[stat.max] = { n: 0, minSpeed: Infinity, meanSpeed: 0, maxSpeed: 0, minTurn: Infinity, meanTurn: 0, maxTurn: 0, minScore: Infinity, meanScore: 0, maxScore: 0 }; |
|
853 var row = histo[stat.max]; |
|
854 row.n++; |
|
855 if (scoreChecked) { |
|
856 row.minScore = Math.min(row.minScore, stat.score); |
|
857 row.meanScore += stat.score; |
|
858 row.maxScore = Math.max(row.maxScore, stat.score); |
|
859 } |
|
860 if (turnChecked) { |
|
861 row.minTurn = Math.min(row.minTurn, stat.turn); |
|
862 row.meanTurn += stat.turn; |
|
863 row.maxTurn = Math.max(row.maxTurn, stat.turn); |
|
864 } |
|
865 if (speedChecked) { |
|
866 var speed = (stat.turn * 1000.0) / stat.ts; |
|
867 row.minSpeed = Math.min(row.minSpeed, speed); |
|
868 row.meanSpeed += speed; |
|
869 row.maxSpeed = Math.max(row.maxSpeed, speed); |
|
870 } |
|
871 } |
868 } |
872 for (var i in histo) { |
869 for (var i in histo) { |
873 var row = histo[i]; |
870 var row = histo[i]; |
874 var n = row.n; |
871 var n = row.n; |
875 if (scoreChecked) |
872 if (scoreChecked) |