22 lines
724 B
Text
22 lines
724 B
Text
var names=T("aleph", "beth", "gimel", "daleth",
|
|
"he", "waw", "zayin", "heth");
|
|
var ptable=T(5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0).apply('/.fp(1.0));
|
|
ptable=ptable.append(1.0-ptable.sum(0.0)); // add last weight to sum to 1.0
|
|
var [const] N=ptable.len();
|
|
|
|
fcn ridx{ i:=0; s:=(0.0).random(1);
|
|
while((s-=ptable[i]) > 0) { i+=1 }
|
|
i
|
|
}
|
|
|
|
const M=0d1_000_000;
|
|
var r=(0).pump(N,List,T(Ref,0)); // list of references to int 0
|
|
(0).pump(M,Void,fcn{r[ridx()].inc()}); // 1,000,000 weighted random #s
|
|
|
|
r=r.apply("value").apply("toFloat"); // (reference to int)-->int-->float
|
|
|
|
println(" Name Count Ratio Expected");
|
|
foreach i in (N){
|
|
"%6s%7d %7.4f%% %7.4f%%".fmt(names[i], r[i], r[i]/M*100,
|
|
ptable[i]*100).println();
|
|
}
|