オブジェクト指向ならあんな書き方しねえよ、ということで修正。Arrayに対してメソッドを追加する方法で。
class Array def deletemin_comp x a = self.dup a.sort! for i in 0 .. a.size - 1 if a[i] > x self.delete_at(self.index(a[i])) return a[i] end end return nil end def returnmin_comp x a = self.dup a.sort! for i in 0 .. a.size - 1 if a[i] > x return a[i] end end return nil end def next_permutation a = self.dup t = [] while a.length > 0 t.push(a.pop) if(a.last == nil) break end if(t.returnmin_comp(a.last)) k = t.deletemin_comp(a.last) t.push(a.pop) a.push(k) t.sort! break end end a += t return a end end a = [1,2,3] a_ = a.dup begin p a a = a.next_permutation end while a_ != a