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