lib/weighted_shuffle/dealer.rb in weighted_shuffle-0.1.0 vs lib/weighted_shuffle/dealer.rb in weighted_shuffle-0.2.0

- old
+ new

@@ -1,16 +1,20 @@ require 'active_support/core_ext/enumerable' module WeightedShuffle class Dealer < Struct.new(:array) - def weighted_shuffle + def weighted_shuffle(options = {}) + factor = options.delete(:factor) a = Marshal.load Marshal.dump(array) - sum = a.sum { |k,v| v || 0.0 } + unless factor.nil? + a.map! { |k, v| [k, v**factor] } + end + sum = a.sum { |k, v| v || 0.0 } b = [] a.length.times do random = SecureRandom.random_number * sum - a.each_with_index do |(k,v),j| + a.each_with_index do |(k, v), j| if random <= v b << a.delete_at(j).first sum -= v break else