Skip to content

Instantly share code, notes, and snippets.

@stephanmantler
Created September 19, 2020 07:57
Show Gist options
  • Select an option

  • Save stephanmantler/805e1ec493b98f50d86a27f27e2a84de to your computer and use it in GitHub Desktop.

Select an option

Save stephanmantler/805e1ec493b98f50d86a27f27e2a84de to your computer and use it in GitHub Desktop.

Revisions

  1. stephanmantler created this gist Sep 19, 2020.
    21 changes: 21 additions & 0 deletions fizzbuzz.swift
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,21 @@
    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())