A
Alex Ciarlillo
The other day I ran into a problem where I needed all the permutations
of a given array. I knew I had covered this in some of my CS classes but
couldn't come up with the algorithm at first. I figured it out on the
drive home from work and decided to rubify it and add it as a method to
the array class. This is what I came up with and was just wondering if
anyone else had a cleaner or more effecient way of accomplishing this.
class Array
def each_perm
if self.size == 1
yield self
else
self.each_index do |i|
tmp, e = self.dup, self
tmp.delete_at(i)
tmp.each_perm do |x|
yield e.to_a + x
end
end
end
end
end
--AC
of a given array. I knew I had covered this in some of my CS classes but
couldn't come up with the algorithm at first. I figured it out on the
drive home from work and decided to rubify it and add it as a method to
the array class. This is what I came up with and was just wondering if
anyone else had a cleaner or more effecient way of accomplishing this.
class Array
def each_perm
if self.size == 1
yield self
else
self.each_index do |i|
tmp, e = self.dup, self
tmp.delete_at(i)
tmp.each_perm do |x|
yield e.to_a + x
end
end
end
end
end
--AC