Skip to content

Instantly share code, notes, and snippets.

@daehn
Created September 27, 2015 16:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save daehn/3598041e07111db3c0d6 to your computer and use it in GitHub Desktop.
Save daehn/3598041e07111db3c0d6 to your computer and use it in GitHub Desktop.
Swift Array extension to create interleaved arrays and permutations.
extension Array {
var decompose: (head: Element, tail: [Element])? {
return count > 0 ? (self[0], Array(self[1..<count])) : nil
}
}
extension Array {
func interleave(x: Element) -> [[Element]] {
guard let (head, tail) = decompose else { return [[x]] }
let start = [x] + self
return [start] + tail.interleave(x).map { [head] + $0 }
}
var permutations: [[Element]] {
guard let (head, tail) = decompose else { return [[]] }
return tail.permutations.flatMap { $0.interleave(head) }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment