Module: Enumerable

Defined in:
lib/polyrex.rb

Instance Method Summary collapse

Instance Method Details

#repeated_permutation(size, &blk) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/polyrex.rb', line 19

def repeated_permutation(size, &blk)
  f = proc do |memo, &blk|
    if memo.size == size
      blk.call memo
    else
      self.each do |i|
        f.call memo + [i], &blk
      end
    end
  end

  if block_given?
    f.call [], &blk
  else
    Enumerator.new(f, :call, [])
  end
end