repeated_permutation, , :
%w(a A).repeated_permutation(3).map(&:join)
# => ["aaa", "aaA", "aAa", "aAA", "Aaa", "AaA", "AAa", "AAA"]
, , , :
str = 'abcde'
chars = str.chars
[false, true].repeated_permutation(str.length).map do |permutation|
chars.zip(permutation).map do |char, upcase|
upcase ? char.upcase : char
end.join
end
# => ["abcde", "abcdE", "abcDe", "abcDE", "abCde", "abCdE", "abCDe", "abCDE",
# "aBcde", "aBcdE", "aBcDe", "aBcDE", "aBCde", "aBCdE", "aBCDe", "aBCDE",
# "Abcde", "AbcdE", "AbcDe", "AbcDE", "AbCde", "AbCdE", "AbCDe", "AbCDE",
# "ABcde", "ABcdE", "ABcDe", "ABcDE", "ABCde", "ABCdE", "ABCDe", "ABCDE"]