forked from Khan/khan-exercises
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprobability.js
More file actions
48 lines (44 loc) · 1.11 KB
/
probability.js
File metadata and controls
48 lines (44 loc) · 1.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
jQuery.extend(KhanUtil, {
/* coinFlips( 2 ) returns
* [["HH", 2], ["HT", 1], ["TH", 1], ["TT", 0]] */
coinFlips: function( n ) {
if ( n === 0 ) {
return [ ["", 0] ];
} else {
var preceding = KhanUtil.coinFlips( n - 1 );
var andAHead = jQuery.map(preceding, function(_arg, i) {
var seq = _arg[0];
var h = _arg[1];
return [["H" + seq, h + 1]];
});
var andATail = jQuery.map(preceding, function(_arg, i) {
var seq = _arg[0];
var h = _arg[1];
return [["T" + seq, h]];
});
return andAHead.concat(andATail);
}
},
/* returns binomial coefficient (n choose k) or
* sum of choose(n, i) for i in k:
* choose( 4, [0, 1, 2] ) = 1 + 4 + 6 = 11 */
choose: function( n, k ) {
if ( typeof k === "number" ) {
if ( k * 2 > n ) {
return KhanUtil.choose( n, n - k );
} else if ( k > 0.5 ) {
return KhanUtil.choose( n, k - 1 ) * (n - k + 1) / (k);
} else if( Math.abs( k ) <= 0.5 ) {
return 1;
} else {
return 0;
}
} else {
var sum = 0;
jQuery.each(k, function( ind, elem ) {
sum += KhanUtil.choose( n, elem );
});
return sum;
}
}
});