ruby-listで…
ruby-listでこんなメールがあった。(ここで見れる。)
2*n 個の集合から、二個づつを取って n 個の組を作る全て
の作りかたを、列挙する script が分からなくて少し
困っています。例えばこんなやつです。[1,2,3,4] => [[[1,2],[3,4]],[1,3][2,4],[1,4],[2,3]]]
自分なりの回答を思いついたけど、日付が古い*1ので日記に書くだけにする。以下は自分の回答
def f(a) result=[] ls=[]; rs=[]; flag=true which = proc{|flag,ls,rs| (flag)? ls : rs} a.each_with_index do |e,i| a[i+1..-1].each {|ele| result << [e, ele]} end result.each do |e| which.call(flag,ls,rs) << e flag = !flag end ls.zip(rs.reverse!) end p f((1..4).to_a) #=>[[[1, 2], [3, 4]], [[1, 4], [2, 3]], [[2, 4], [1, 3]]]
*1:Date: Sun, 28 Oct 2007 01:52:14 +0900