Skip to content

Instantly share code, notes, and snippets.

@marcorei
Created April 19, 2018 14:07
Show Gist options
  • Save marcorei/8951600900f0a8151672f96921232f1a to your computer and use it in GitHub Desktop.
Save marcorei/8951600900f0a8151672f96921232f1a to your computer and use it in GitHub Desktop.
Probability calculation helper for Google Spreadsheets
function _FACT(num) {
var rval = 1;
for (var i = 2; i <= num; i++) {
rval = rval * i;
}
return rval;
};
function _COMBIN(x, y) {
if (x < y) return 0;
return _FACT(x) / ( _FACT(y) * _FACT(x - y) );
};
// Standard Lotto Berechnung.
function LOTTO(topf, gezogen, richtige) {
var correctPos = _COMBIN(gezogen, richtige);
var wrongPos = _COMBIN(topf - gezogen, gezogen - richtige);
var pos = correctPos * wrongPos;
var allPos = _COMBIN(topf, gezogen);
return pos / allPos;
}
// Berechnet die Wahrscheinlichkeit bei einer Ziehung mindestens x richtige zu haben.
function LOTTO_KUMUL(topf, gezogen, richtige) {
var kumul = 0;
for(var i = richtige; i <= gezogen; i++) {
kumul += LOTTO(topf, gezogen, i);
}
return kumul;
}
// Berechnet die Wahrscheinlichkeit bei der letzten Ziehung einen neuen Gewinner zu finden, wenn in jeder vorangehenden Ziehung keine gefunden wurde.
function LOTTO_STEP_DEPEND(topf, gezogen, richtige) {
if (gezogen == richtige) {
return LOTTO(topf, gezogen, richtige);
}
// Nur die mit richtige-1 im letzten Schritt können hier gewinnen.
var lastDrawNum = gezogen - 1
var chanceToBeOneOf = LOTTO(topf, lastDrawNum, richtige - 1);
// Die neue Ziehung ist aus dem Topf verbleibender Gegestände
var potPre = topf - lastDrawNum;
var chanceToGetTheOne = LOTTO(potPre, 1, 1);
// Combine chances
return chanceToBeOneOf * chanceToGetTheOne;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment