Skip to content

Instantly share code, notes, and snippets.

@stephanmantler
Created September 19, 2020 07:57
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 stephanmantler/805e1ec493b98f50d86a27f27e2a84de to your computer and use it in GitHub Desktop.
Save stephanmantler/805e1ec493b98f50d86a27f27e2a84de to your computer and use it in GitHub Desktop.
Functional Swift FizzBuzz
extension Array where Element == Int {
func fizzBuzz() -> [String] {
return self.map(evalBuilder(pickers: [fibui(3, "Fizz"), fibui(5, "Buzz"), fibui(7, "Humm")]))
}
private func fibui(_ mult: Int, _ out: String) -> ((Int)->String?) {
return { (number: Int) in number.isMultiple(of: mult) ? out : nil }
}
private func evalBuilder(pickers:[(Int)->String?]) -> ((Int)->String) {
return { (number: Int) in
let output = pickers.compactMap { f in return f(number) }
return output.isEmpty ? "\(number)" : output.joined()
}
}
}
let array = Array(1...20)
print(array.fizzBuzz())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment