Sha256: 9cd17ec83a47088254cec27f26743605f1e1b08a993cb0ad0f5e5e5cfbf3f0b1

Contents?: true

Size: 885 Bytes

Versions: 1

Compression:

Stored size: 885 Bytes

Contents

require 'ludy/version'

class Array
  if Ludy.ruby_before '1.9.0'
    require 'ludy/array/foldr'
    require 'ludy/symbol/to_proc' if Ludy.ruby_before '1.9.0'
    # 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
  else
    require 'ludy/array/tail'
    # for each combos
    #  [[0,1],[2,3]].combos
    #  => [[0,2],[0,3],[1,2],[1,3]]
    # simply:
    #  array.first.product *array.tail
    def combos
      first.product(*tail)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
ludy-0.1.15 lib/ludy/array/combos.rb