Project

General

Profile

Actions

Feature #4907

closed

enumerable#permutation and combination

Added by neleai (Ondrej Bilka) almost 13 years ago. Updated about 6 years ago.

Status:
Rejected
Target version:
-
[ruby-core:37231]

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}

Updated by mame (Yusuke Endoh) about 12 years ago

  • Status changed from Open to Assigned
  • Assignee set to mrkn (Kenta Murata)

Updated by mame (Yusuke Endoh) over 11 years ago

  • Priority changed from Normal to 3
  • Target version set to 2.6

This will not work for an enumerator created from IO.

--
Yusuke Endoh

Actions #3

Updated by naruse (Yui NARUSE) over 6 years ago

  • Target version deleted (2.6)

Updated by mrkn (Kenta Murata) about 6 years ago

  • Status changed from Assigned to Closed

No use case is shown, so I close this issue.

Actions #5

Updated by mrkn (Kenta Murata) about 6 years ago

  • Status changed from Closed to Rejected
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0