From: "Schüle Daniel" Date: 2006-07-31T08:10:07+09:00 Subject: Array#permutate Hello, this is my handmade Array#permutate function are there any alternatives (maybe C extension modules)? especially are there functions that would not create all permutations and return them as one single memory consuming array but give each one on demand? Regards, Daniel # arrayperm.rb class Array def permutate return self if [0,1].member? size return [self, self.reverse] if size == 2 return [[self[0],self[1],self[2]], [self[0],self[2],self[1]], [self[1],self[0],self[2]], [self[1],self[2],self[0]], [self[2],self[0],self[1]], [self[2],self[1],self[0]]] if size == 3 ret = [] for perm in self[1..-1].permutate for i in 0..perm.size ret.push( perm[0...i] + [first] + perm[i..-1] ) end end return ret end end irb(main):011:0* require "arrayperm" => true irb(main):012:0> [1,2,3,4].permutate.size => 24 irb(main):013:0> [1,2,3,4].permutate.each{|perm| p perm};nil [1, 2, 3, 4] [2, 1, 3, 4] [2, 3, 1, 4] [2, 3, 4, 1] [1, 2, 4, 3] [2, 1, 4, 3] [2, 4, 1, 3] [2, 4, 3, 1] [1, 3, 2, 4] [3, 1, 2, 4] [3, 2, 1, 4] [3, 2, 4, 1] [1, 3, 4, 2] [3, 1, 4, 2] [3, 4, 1, 2] [3, 4, 2, 1] [1, 4, 2, 3] [4, 1, 2, 3] [4, 2, 1, 3] [4, 2, 3, 1] [1, 4, 3, 2] [4, 1, 3, 2] [4, 3, 1, 2] [4, 3, 2, 1] => nil irb(main):014:0>