2015-11-17 7 views

答えて

9

を:わずかに異なるアプローチがあります

defmodule Permutations do 
    def of([]) do 
    [[]] 
    end 

    def of(list) do 
    for h <- list, t <- of(list -- [h]), do: [h | t] 
    end 
end 
+1

。 –

+5

@OnorioCatenacciそれはあまり有益なコメントではありません。私はまだエリクサーのエキスパートではありません。あなたが投稿する時間があれば、もっと慣れ親しんだ解決策を見てうれしく思います。私はそれがよくある質問だと思っていたので、ほとんどここに入れましたが、私は答えが見つかりませんでした。次回に私が検索するとき、私はします。私はそれを他者が使うことができる「自己へのメモ」と考えています。 –

+1

コメントは本当にあなたに向けられていませんでした。あなたのコードを見るかもしれない他の人に向けられていましたが、それ以上のことは知らずに、それがエリクシールコードを書く正しい方法だと仮定しました。 –

5

、それはまた、結果リストのための所望の長さをspecifingサポートしています。

defmodule Permutations do 
    def shuffle(list), do: shuffle(list, length(list)) 

    def shuffle([], _), do: [[]] 
    def shuffle(_, 0), do: [[]] 
    def shuffle(list, i) do 
    for x <- list, y <- shuffle(list, i-1), do: [x|y] 
    end 
end 

実行中:

非常に慣用エリクサーコードではありません
iex(24)> Permutations.shuffle ["a", "b", "c"] 
[["a", "a", "a"], ["a", "a", "b"], ["a", "a", "c"], ["a", "b", "a"], 
["a", "b", "b"], ["a", "b", "c"], ["a", "c", "a"], ["a", "c", "b"], 
["a", "c", "c"], ["b", "a", "a"], ["b", "a", "b"], ["b", "a", "c"], 
["b", "b", "a"], ["b", "b", "b"], ["b", "b", "c"], ["b", "c", "a"], 
["b", "c", "b"], ["b", "c", "c"], ["c", "a", "a"], ["c", "a", "b"], 
["c", "a", "c"], ["c", "b", "a"], ["c", "b", "b"], ["c", "b", "c"], 
["c", "c", "a"], ["c", "c", "b"], ["c", "c", "c"]] 

iex(25)> Permutations.shuffle ["a", "b", "c"], 2 
[["a", "a"], ["a", "b"], ["a", "c"], ["b", "a"], ["b", "b"], ["b", "c"], 
["c", "a"], ["c", "b"], ["c", "c"]] 

Source

関連する問題