A Twitch.tv viewer reward and games system.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

96 lines
1.8 KiB

var script = process.cwd() + '/' + process.argv[2];
var spawn = require('child_process').spawn;
var numbers = [];
var boringResults = 0;
var scriptRuns = 0;
function runScript() {
scriptRuns++;
var child = spawn(process.execPath, [script]);
var buffer = '';
child.stdout.on('data', function(chunk) {
buffer += chunk;
var offset;
while ((offset = buffer.indexOf('\n')) > -1) {
var number = parseInt(buffer.substr(0, offset), 10);
buffer = buffer.substr(offset + 1);
var maxBefore = max();
var minBefore = min();
numbers.push(number);
if (maxBefore === max() && minBefore === min()) {
boringResults++;
}
if (boringResults > 10) {
boringResults = 0;
child.kill();
runScript();
}
}
});
}
function report() {
console.log(
'max: %s | median: %s | sdev: %s | last: %s | min: %s | runs: %s | results: %s',
max(),
median(),
sdev(),
numbers[numbers.length - 1],
min(),
scriptRuns,
numbers.length
);
}
function min() {
if (!numbers.length) return undefined;
return numbers.reduce(function(min, number) {
return (number < min)
? number
: min;
});
}
function max() {
if (!numbers.length) return undefined;
return numbers.reduce(function(max, number) {
return (number > max)
? number
: max;
});
}
function median() {
return numbers[Math.floor(numbers.length / 2)];
}
function sdev() {
if (!numbers.length) return undefined;
return Math.round(Math.sqrt(variance()));
}
function variance() {
var t = 0, squares = 0, len = numbers.length;
for (var i=0; i<len; i++) {
var obs = numbers[i];
t += obs;
squares += Math.pow(obs, 2);
}
return (squares/len) - Math.pow(t/len, 2);
}
setInterval(report, 1000);
runScript();