["a", "b", "c"].all_possibilities(4)
次のようなものを生成したい: からの最大文字数を使用しabc acb bac bca cab cba abca abcb abcc acba acbb acbc ...
て、最後の可能な組み合わせ順列まで。4
abc
順列を試してみましたが、そうではないと思います。順列する%w[a b c].permutation.map &:join
だけなので、長さは 3 以下です。何か助けはありますか?
["a", "b", "c"].all_possibilities(4)
次のようなものを生成したい: からの最大文字数を使用しabc acb bac bca cab cba abca abcb abcc acba acbb acbc ...
て、最後の可能な組み合わせ順列まで。4
abc
順列を試してみましたが、そうではないと思います。順列する%w[a b c].permutation.map &:join
だけなので、長さは 3 以下です。何か助けはありますか?
どうですか?
class Array
def all_possibilities(range)
return permutation(range).to_a if range < size
(size..range).flat_map do |i|
permutation(range - i).flat_map do |e|
(self + e).permutation.to_a
end
end
end
end
これは、文字列の配列の配列を返します。
%w(a c).all_possibilities(3)
# => [["a", "c", "a"], ["a", "a", "c"], ["c", "a", "a"],
# ["c", "a", "a"], ["a", "a", "c"], ["a", "c", "a"],
# ["a", "c", "c"], ["a", "c", "c"], ["c", "a", "c"],
# ["c", "c", "a"], ["c", "a", "c"], ["c", "c", "a"],
# ["a", "c"], ["c", "a"]]
それを印刷するには、あなたはただすることができますresult.map(&:join).join(', ')
。
ps:使用を避けることができる重複がありますuniq
。これは、。のような配列に同じ文字を2回含めることができるために発生します%w(a c a)
。