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[i]

tmp.delete_at(i)

tmp.each_perm do |x|

yield e.to_a + x

end

end

end

end

end

–AC