Actions
Feature #4907
closedenumerable#permutation and combination
Description
Hello
Methods permutation and combination are defined for array but it make more sense to define them for enumerable.
Here is sample implementation which for simplicity works only with blocks.
Note that implementation works lazily.
It changes traversal order but documentation states that order is unspecified.
module Enumerable
def perm(n)
comb(n){|ary|
ary.permutation{|p| yield(p)}
}
end
def comb(n,&m)
ary=[]
e=to_enum.with_index
_comb(e,n-1,1.0/0.0,ary,m)
end
def _comb(e,n,bound,ary,m)
e.each{|el,i|
return if i>=bound
ary[n]=el
if n==0
m.call(ary)
else
_comb(e,n-1,i,ary,m)
end
}
end
end
[1,2,4,3,5].comb(2){|a| puts a.inspect}
(1..4).comb(2){|a| puts a.inspect}
(1..4).perm(2){|a| puts a.inspect}
Actions
Like0
Like0Like0Like0Like0Like0