class MathProbability::Probability
This class encapsulates mathimatical probability methods.
Public Class Methods
combinations(objects, at_a_time)
click to toggle source
# File lib/math_probability.rb, line 26 def self.combinations(objects, at_a_time) (((objects.factoral)/((objects-at_a_time).factoral))*(1.0/(at_a_time.factoral))).to_i end
permutations_no_repeat(objects, at_a_time)
click to toggle source
# File lib/math_probability.rb, line 18 def self.permutations_no_repeat(objects, at_a_time) (objects.factoral)/(objects - at_a_time).factoral end
permutations_with_repeat(objects, at_a_time)
click to toggle source
# File lib/math_probability.rb, line 22 def self.permutations_with_repeat(objects, at_a_time) objects**at_a_time end
probability(choices, outcomes, reduce=true)
click to toggle source
# File lib/math_probability.rb, line 30 def self.probability(choices, outcomes, reduce=true) a = choices.to_f / outcomes answer = {decimal: a, percentage: "#{a*100}%", fraction: (reduce ? reduced_fraction(choices, outcomes) : "#{choices}/#{outcomes}")} end
sigma(start_seq, end_seq, seq_step)
click to toggle source
# File lib/math_probability.rb, line 8 def self.sigma(start_seq, end_seq, seq_step) summnation ||= 0 seq_step.gsub!(/((?![x-z0-9\s\.\-\+\*\/\(\)]).)*/,'').upcase! raise ArgumentError , "Only use x,y,z as variables" if (seq_step =~ /[A-Z]/).nil? (start_seq..end_seq).each do |value| summnation += eval(seq_step.gsub(/[X-Z]/,value.to_s)) end summnation end
Private Class Methods
reduced_fraction(nominator, denominator)
click to toggle source
# File lib/math_probability.rb, line 37 def self.reduced_fraction(nominator, denominator) lcd ||= denominator denominator.downto(2).each do |n| if nominator % n == 0 && denominator % n == 0 && n != denominator && n < lcd lcd = n end end lcd != denominator ? "#{nominator/lcd}/#{denominator/lcd}" : "#{nominator}/#{denominator}" end