Sha256: 938fff1cd2bbcdab9ef5b5a8d74815183f73e8aaaa656be1984fd2083c7730cc
Contents?: true
Size: 630 Bytes
Versions: 1
Compression:
Stored size: 630 Bytes
Contents
require 'rubygems' require 'bsearch' class Array def get_rand(weights) GuidedRandomness.new(self, weights).sample.first end end class GuidedRandomness < Struct.new(:source, :weights) def initialize(*params) super raise ArgumentError, "Wrong number of array elements!" if weights.size != source.size || weights.size == 0 @sums = weights.inject([]){|ary, weight| ary << ((ary.last || 0) + weight)} @total = @sums.last end def sample(size = 1) size.times.map do rand = Kernel.rand*@total index = @sums.bsearch_lower_boundary{|x| x <=> rand} source[index] end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
guided_randomness-0.1.4 | lib/guided_randomness.rb |