Generating all possible rules
We need a method to generate all possible combinations of elements of this array. Combinations are found via the binary representation of subsets, as shown in the following snippet:
public extension Array {
public func combinations() -> [[Element]] {
if isEmpty { return [] }
let numberOfSubsets = Int(pow(2, Double(count)))
var result = [[Element]]()
for i in 0..<numberOfSubsets {
var remainder = i
var index = 0
var combination = [Element]()
while remainder > 0 {
if remainder % 2 == 1 {
combination.append(self[index])
}
index += 1
remainder /= 2
}
result.append(combination)
}
return result
}
} The following usage example:
let array = [1,2,3] print(array.combinations())
Produces:
[[], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2...