10809


[1, 3, 5]から[[1], [1, 3], [3, 5], [1, 3, 5]]を作るスマートな書き方はありませんか？

上記間違えてました。  
[1, 3, 5]から[[1], [3], [5], [1, 3], [3, 5], [1, 3, 5]]です。  
[1, 2, 3,
4]だと、[[1],[2],[3],[4],[1,2],[2,3],[3,4],[1,2,3],[2,3,4],[1,2,3,4]]です。


CC BY-SA 3.0
2015-05-31T05:50:52.730
10808
2015-06-02T02:33:18.940
2015-05-31T06:40:37.127
9596
9596
question
ruby
[1, 3, 5]から[[1], [1, 3], [3, 5], [1, 3, 5]]を作るには？


こんな感じでできました。

[code]

    a = [1, 3, 5]
    a.each_cons(1).to_a  + a.each_cons(2).to_a + a.each_cons(3).to_a
    
[/code]

配列のサイズによらないやり方はこんな感じでしょうか。

[code]

    a = [1, 3, 5]
    a.size.times.map{|i| a.each_cons(i+1).to_a}.flatten(1)
    
[/code]


CC BY-SA 3.0
2015-05-31T07:03:29.750
10809
2015-05-31T07:12:52.960
2015-05-31T07:12:52.960
3249
3249
10808
answer


tmtmsさんの回答を参考に、別解を考えてみました。

[code]

    def hoge(arr, size = 1)
      (size <= arr.size) ? arr.each_cons(size).to_a + hoge(arr, size + 1) : []
    end
    
    hoge [1,3,5]  #=> [[1], [3], [5], [1, 3], [3, 5], [1, 3, 5]]
    
[/code]


CC BY-SA 3.0
2015-06-02T02:33:18.940
10865
2015-06-02T02:33:18.940
9403
10808
answer