def delete_min_comp a,x a_ = a.dup a_.sort! for i in 0 .. a_.size - 1 if a_[i] > x a.delete_at(a.index(a_[i])) return a_[i] end end return nil end def ret_min_comp a,x a_ = a.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 array a = array.dup t = [] while a.length > 0 t.push(a.pop) if(a.last == nil) break end if(ret_min_comp(t,a.last)) k = delete_min_comp(t,a.last) t.push(a.pop) a.push(k) t.sort! break end end a += t return a end a = [1,2,3,4,5,6,7,8,9] a_ = a.dup begin p a a = next_permutation a end while a_ != a
解説は後で!