42 lines
740 B
Text
42 lines
740 B
Text
|
|
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})
|
|||
|
|
);
|
|||
|
|
}
|