class SumAllCombinations

Attributes

calculated_values[R]
combinations_used[R]
flattened[R]
original[RW]

Public Class Methods

new(array_of_nums) click to toggle source
# File lib/sum_all_number_combinations/sum_all_combinations.rb, line 5
def initialize(array_of_nums)
  raise ArgumentError, "SumAllCombinations initializer param must be an Array" unless array_of_nums.is_a? Array
  @original = array_of_nums 
  @flattened = @original.flatten
end

Public Instance Methods

sum(remove_duplicates: false, sort: true) click to toggle source
# File lib/sum_all_number_combinations/sum_all_combinations.rb, line 11
def sum(remove_duplicates: false, sort: true)
  return if @flattened.nil? || @flattened.empty?
  @combinations_used = []
  @calculated_values = []
  @flattened = @flattened.map{ |i| i.to_f }.select{ |i| i != 0.0 }
  calculate([], 0, 0) 
  @calculated_values.uniq! if remove_duplicates
  @calculated_values.sort! if sort
end

Private Instance Methods

calculate(current, index, accumulation) click to toggle source
# File lib/sum_all_number_combinations/sum_all_combinations.rb, line 23
def calculate(current, index, accumulation)
  (index...@flattened.length).each do |i|
    calculate(current + [@flattened[i]], i + 1, accumulation + @flattened[i])
  end
 @combinations_used.push("#{current.join('+')}=#{accumulation}") if current.size > 1
 @calculated_values.push(accumulation) if current.size > 1
end