Skip to content

Instantly share code, notes, and snippets.

@nevans
Created January 13, 2010 21:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nevans/276593 to your computer and use it in GitHub Desktop.
Save nevans/276593 to your computer and use it in GitHub Desktop.
Array#permute in ruby
class Array
def permute
return Array(first).map {|e| [e] } if length == 1
Array(first).inject([]) {|a,e|
Array(self[1..-1]).permute.each {|p|
a << [e] + p
}
a
}
end
end
a = []
a.permute # => []
a.permute == [] # => true
a = [[1, 2]]
a.permute # => [[1], [2]]
a.permute == [[1], [2]] # => true
a = [[4, 5]]
a.permute # => [[4], [5]]
a.permute == [[4], [5]] # => true
a = [[1], [2]]
a.permute # => [[1, 2]]
a.permute == [[1,2]] # => true
a = [[1, 2], [4]]
a.permute # => [[1, 4], [2, 4]]
a.permute == [[1,4], [2,4],] # => true
a = [[1, 2], [4]]
a.permute # => [[1, 4], [2, 4]]
a.permute == [[1,4], [2,4],] # => true
a = [[1, 2], [4, 5]]
a.permute # => [[1, 4], [1, 5], [2, 4], [2, 5]]
a.permute == [[1,4], [1,5], [2,4], [2,5]] # => true
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
a.permute # => [[1, 4, 7], [1, 4, 8], [1, 4, 9], [1, 5, 7], [1, 5, 8], [1, 5, 9], [1, 6, 7], [1, 6, 8], [1, 6, 9], [2, 4, 7], [2, 4, 8], [2, 4, 9], [2, 5, 7], [2, 5, 8], [2, 5, 9], [2, 6, 7], [2, 6, 8], [2, 6, 9], [3, 4, 7], [3, 4, 8], [3, 4, 9], [3, 5, 7], [3, 5, 8], [3, 5, 9], [3, 6, 7], [3, 6, 8], [3, 6, 9]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment