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}) ); }