42 lines
740 B
Plaintext
42 lines
740 B
Plaintext
define TRIALS = 1e4;
|
||
|
||
func prob_choice_picker(options) {
|
||
var n = 0;
|
||
var a = [];
|
||
options.each { |k,v|
|
||
n += v;
|
||
a << [n, k];
|
||
}
|
||
func {
|
||
var r = 1.rand;
|
||
a.first{|e| r <= e[0] }[1];
|
||
}
|
||
}
|
||
|
||
var ps = Hash(
|
||
aleph => 1/5,
|
||
beth => 1/6,
|
||
gimel => 1/7,
|
||
daleth => 1/8,
|
||
he => 1/9,
|
||
waw => 1/10,
|
||
zayin => 1/11
|
||
)
|
||
|
||
ps{:heth} = (1 - ps.values.sum)
|
||
|
||
var picker = prob_choice_picker(ps)
|
||
var results = Hash()
|
||
|
||
TRIALS.times {
|
||
results{picker()} := 0 ++;
|
||
}
|
||
|
||
say "Event Occurred Expected Difference";
|
||
for k,v in (results.sort_by {|k| results{k} }.reverse) {
|
||
printf("%-6s %f %f %f\n",
|
||
k, v/TRIALS, ps{k},
|
||
abs(v/TRIALS - ps{k})
|
||
);
|
||
}
|