DEV Community

loading...

Discussion on: Unconditional Challenge: FizzBuzz without `if`

Collapse
miketalbot profile image
Mike Talbot • Edited
function map(compare, say, next = v => v) {
    return function(value) {
        return [() => say, next][Math.sign(compare(value))](value)
    }
}
const process = map(
    v => (v % 3) + (v % 5),
    "fizzbuzz",
    map(v => v % 5, "buzz", map(v => v % 3, "fizz"))
)

for (let i = 1; i < 31; i++) {
    console.log(process(i))
}

Enter fullscreen mode Exit fullscreen mode
Collapse
kallmanation profile image
Nathan Kallman Author

Well done! Clever use of Math.sign to select either the first or second element from an array

Collapse
miketalbot profile image
Mike Talbot • Edited

Slightly shorter without bothering to call out for variable potential conditions and using anons:


let map = (compare, say, next = v => v) => v => [() => say, next][Math.sign(v % compare)](v)
const process = map(15, "FizzBuzz", map(5, "Buzz", map(3, "Fizz")))

Enter fullscreen mode Exit fullscreen mode
Forem Open with the Forem app