Problem
I'm trying to find all of the possible combinations of capitalization for a String in Swift. For example, given the String "abc", I would want my method to return an Array of Strings, like this: ["Abc", "aBc", "abC", "ABc", "abc", "ABC", "aBC", "AbC"]. The formula for the possible number of capitalization combinations is like this:
2i
where i is the number of Characters in the String.
Attempted Solutions
I've tried the following function, via an extension to the String type:
extension String {
func allPossibleCombinations() -> [String] {
let string = self
var result = [String]()
var current = string
result.append(current)
for i in 0..<string.count {
let index = string.index(string.startIndex, offsetBy: i)
if string[index].isLetter {
current = current.replacingCharacters(in: index...index, with: String(current[index]).uppercased())
result.append(current)
}
}
return result
}
}
This didn't work because it only returns capitalizations in order. For example, if I were to call this method on the String "abc", it would return
["abc", "Abc", "ABc", "ABC"]
This should produce, as stated above, 8 different Strings. I suspect that I need to factor in an exponent to my code, or potentially some form of randomly choosing a Character.
Similar questions that are NOT duplicates
- This
Pythonquestion discusses the same issue: Find all upper, lower and mixed case combinations of a string. However, this does not work for my issue because it is inPython, notSwift. - This
JavaScriptquestion talks about finding all combinations of aString: Find all the combinations of a string Javascript. However, this is about general combinations, not capitalization ones, and is also in the wrong language. - This
JavaScriptquestion discusses the same issue: Find all lowercase and uppercase combinations of a string in Javascript. However, this is inJavaScript, notSwift. - This
Cquestion deals with the same issue: Finding all capital letter combinations of random text. However, it is inC, notSwift.
Summary
I am trying to make a function to get all possible capitalization forms of a String. I have a current attempt, but it is not sufficient as it does not produce all possible options.