class SimpleCombiner

no guarantee for memory usage efficiency no garantee for computation efficiency no garentee for no-bug :D

Public Class Methods

cPickup(arr) click to toggle source
# File lib/utils/simple_combiner.rb, line 50
def self.cPickup(arr)
  results_all = []

  arr.size.downto(1).each do |i|
    results = self.combine(arr.clone, i).select do |result|
      next nil if result.uniq.size != result.size
      next result
    end

    results_all += results
  end

              results_all
end
combine(the_list, number) click to toggle source
# File lib/utils/simple_combiner.rb, line 18
def self.combine(the_list, number)
    return [] if number == 0 || the_list.empty?

  this_results = []
  while element = the_list.delete_at(0)
    results = []

    number.downto(0).each do |num|
      combine_results = [[nil]]
      combine_results = combine(Marshal.load(Marshal.dump(the_list)), number - num) + combine_results

      result = []
      combine_results.each do |combine_result|
        result = ([element] * num + combine_result).compact

        if result.size < number
          break
        else
          results << result
        end
      end
    end

    if this_results.last != results.last
      this_results += results
    else
    end
  end

  return this_results
end
permutate(the_list, number, current_list = []) click to toggle source
# File lib/utils/simple_combiner.rb, line 5
def self.permutate(the_list, number, current_list = [])
  return current_list if number == 0

  result = the_list.map do |element|
    _current_list = Marshal.load(Marshal.dump(current_list))
    _current_list << element
    permutate(the_list, number - 1, _current_list.freeze)
  end

  return result[0][0].is_a?(Array) ? result.inject([]){|arr, ele| arr + ele} : result
end