DEV Community

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 •

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