近岡@高岡西高です。 > [1,2,3,4].conbination(2) => [ [1,2],[1,3],[1,4],[2,3],[2,4],[3,4] ] > [1,2,3].conbination([4,5]) => [ [1,4],[1,5],[2,4],[2,5],[3,4],[3,5] ] > >こんな結果を帰すものを ruby的に作るにはどうしたものでしょうか。 > 引数ですが、例えば、 [1,2,3].conbination(1,[4,5]) => [ [1,4,5],[2,4,5],[3,4,5] ] [1,2,3].conbination(2,[4,5]) => [ [1,2,4,5],[1,3,4,5],[2,3,4,5] ] ・・・ [1,2,3].conbination(1,[]) => [ [1],[2],[3] ] # 第2引数は省略可? [1,2,3].conbination(2,[]) => [ [1,2],[1,3],[2,3] ] ・・・ のような仕様にすれば、 [a,b,c,…,d,e].conbination(n,[])の帰す配列は、2つの配列の連結 [a,b,c,…,d].conbination(n,[]) + [a,b,c,…,d].conbination(n-1,[e]) で与えられ、 [a,b,c,…,d,e].conbination(n,[f,…,g])の帰す配列は、2つの配列の連結 [a,b,c,…,d].conbination(n,[f,…,g]) + [a,b,c,…,d].conbination(n-1,[e,f,…,g]) で与えられ、 いずれも単純なアルゴリズムになります? もっとも、[a,b,c,…,d,e].size = N のとき、 再帰ルーチンを呼び出す回数がほぼ(2^N )回になるので、 実用的ではありませんが。 ついでに言えば、例えば [1,2,3].conbination(2,[4,5]) の帰す配列は、 [1,2,3].conbination(2,[]).map{|k| [k]+[4,5] } の帰す配列にも等しくなりますね。 0----+----1----+----2----+----3----+----4----+----5----+----6 近岡 宣吉 Chikaoka, Nobuyoshi 富山県立高岡西高等学校(数楽科)