Sha256: c506cd13c1857d77b2c24aa18e2dfc74b6e083adb304b8e712b7512914c7d2a7

Contents?: true

Size: 567 Bytes

Versions: 9

Compression:

Stored size: 567 Bytes

Contents

require 'ludy/array/reverse_map'
require 'ludy/symbol/to_proc'
require 'ludy/array/foldr'

class Array
  # for each combos
  #   [[0,1],[2,3]].combos
  #   => [[0,2],[0,3],[1,2],[1,3]]
  def combos
    result = []
    radixs = reverse_map(&:size)
    inject(1){|r, i| r * i.size}.times{ |step|
      result << foldr(lambda{ |i, r|
                        radix = radixs[r.size]
                        r.unshift i[step % radix]
                        step /= radix unless radix.nil?
                        r
                      }, [])
    }
    result
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ludy-0.1.2 lib/ludy/array/combos.rb
ludy-0.1.0 lib/ludy/array/combos.rb
ludy-0.1.1 lib/ludy/array/combos.rb
ludy-0.1.5 lib/ludy/array/combos.rb
ludy-0.1.6 lib/ludy/array/combos.rb
ludy-0.1.7 lib/ludy/array/combos.rb
ludy-0.1.8 lib/ludy/array/combos.rb
ludy-0.1.4 lib/ludy/array/combos.rb
ludy-0.1.3 lib/ludy/array/combos.rb