111 lines
4.7 KiB
Plaintext
111 lines
4.7 KiB
Plaintext
#!/usr/bin/env jsish
|
|
"use strict";
|
|
|
|
function statisticsBasic(args:array|string=void, conf:object=void) {
|
|
var options = { // Rosetta Code, Statistics/Basic
|
|
rootdir :'', // Root directory.
|
|
samples : 0 // Set sample size from options
|
|
};
|
|
var self = { };
|
|
parseOpts(self, options, conf);
|
|
|
|
function generateStats(n:number):object {
|
|
var i, sum = 0, sum2 = 0;
|
|
var hist = new Array(10);
|
|
hist.fill(0);
|
|
for (i = 0; i < n; i++) {
|
|
var r = Math.random();
|
|
sum += r;
|
|
sum2 += r*r;
|
|
hist[Math.floor((r*10))] += 1;
|
|
}
|
|
var mean = sum/n;
|
|
var stddev = Math.sqrt((sum2 / n) - mean*mean);
|
|
var obj = {n:n, sum:sum, mean:mean, stddev:stddev};
|
|
return {n:n, sum:sum, mean:mean, stddev:stddev, hist:hist};
|
|
}
|
|
|
|
function reportStats(summary:object):void {
|
|
printf("Samples: %d, mean: %f, stddev: %f\n", summary.n, summary.mean, summary.stddev);
|
|
var max = Math.max.apply(summary, summary.hist);
|
|
for (var i = 0; i < 10; i++) {
|
|
printf("%3.1f+ %-70s %5d\n", i * 0.1, 'X'.repeat(70 * summary.hist[i] / max), summary.hist[i]);
|
|
}
|
|
return;
|
|
}
|
|
|
|
function main() {
|
|
LogTest('Starting', args);
|
|
switch (typeof(args)) {
|
|
case 'string': args = [args]; break;
|
|
case 'array': break;
|
|
default: args = [];
|
|
}
|
|
if (self.rootdir === '')
|
|
self.rootdir=Info.scriptDir();
|
|
|
|
Math.srand(0);
|
|
if (self.samples > 0) reportStats(generateStats(self.samples));
|
|
else if (args[0] && parseInt(args[0])) reportStats(generateStats(parseInt(args[0])));
|
|
else for (var n of [100, 1000, 10000]) reportStats(generateStats(n));
|
|
|
|
debugger;
|
|
LogDebug('Done');
|
|
return 0;
|
|
}
|
|
|
|
return main();
|
|
}
|
|
|
|
provide(statisticsBasic, 1);
|
|
|
|
if (isMain()) {
|
|
if (!Interp.conf('unitTest'))
|
|
return runModule(statisticsBasic);
|
|
|
|
;' statisticsBasic unit-test';
|
|
; statisticsBasic();
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
=!EXPECTSTART!=
|
|
' statisticsBasic unit-test'
|
|
statisticsBasic() ==> Samples: 100, mean: 0.534517, stddev: 0.287124
|
|
0.0+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 8
|
|
0.1+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 11
|
|
0.2+ XXXXXXXXXXXXXXXXXXXXXXXXXX 6
|
|
0.3+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 10
|
|
0.4+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 10
|
|
0.5+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 11
|
|
0.6+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 8
|
|
0.7+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 16
|
|
0.8+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7
|
|
0.9+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 13
|
|
Samples: 1000, mean: 0.490335, stddev: 0.286562
|
|
0.0+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 98
|
|
0.1+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 122
|
|
0.2+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 85
|
|
0.3+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 106
|
|
0.4+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 105
|
|
0.5+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 101
|
|
0.6+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 93
|
|
0.7+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 106
|
|
0.8+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 98
|
|
0.9+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 86
|
|
Samples: 10000, mean: 0.499492, stddev: 0.287689
|
|
0.0+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 969
|
|
0.1+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 992
|
|
0.2+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1067
|
|
0.3+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1011
|
|
0.4+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 973
|
|
0.5+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1031
|
|
0.6+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 971
|
|
0.7+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 999
|
|
0.8+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 991
|
|
0.9+ XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 996
|
|
0
|
|
=!EXPECTEND!=
|
|
*/
|