re: Fizz Buzz in Every Language VIEW POST

Since nobody has done Javascript yet, here's a crazy implementation.

const worder = (predicate, patterner) => (prev, n) =>
predicate(prev, n)
? patterner(prev, n)
: prev

const isDivisible = d => (_, n) =>
n % d === 0

const isEmpty = s =>
s.length === 0

const append = x => (prev) => prev + x

const setNumber = (_, n) => n

const fizzer = worder(isDivisible(3), append('fizz'))

const buzzer = worder(isDivisible(5), append('buzz'))

const numberer = worder(isEmpty, setNumber)

const reducer = (...worders) => n =>
worders.reduce(
(prev, w) => w(prev, n),
''
)

const fizzbuzzer = reducer(
fizzer,
buzzer,
numberer
)

for (let i = 0; i <= 100; i++) {
console.log(fizzbuzzer(i))
}

Consider how easy it is to extend to print 'fazz' for multiples of 7.

const fazzer = worder(isDivisible(7), append('fazz'))

const fizzbuzzfazzer = reducer(
fizzer,
buzzer,
fazzer,
numberer
)

I appreciate the commitment to the obscure. Haha these are great.

That's the whole point of the exercise, right? :D

Oh absolutely! Got any code golf solutions?

Hmm... the best I can come up with right now is 85 chars. Nothing really clever, just sacrificed readability for space.

let i=0;while(i++<101){console.log(i%15==0?'fizzbuzz':i%5==0?'buzz':i%3==0?'fizz':i)}

Another fun one, albeit longer, is this.

console.log(new Array(101)
.fill(1)
.map((_, i) =>
i % 15 == 0 ? 'fizzbuzz' :
i % 3 == 0 ? 'fizz' :
i % 5 == 0 ? 'buzz' :
i
)
.slice(1)
.join('\n'))
code of conduct - report abuse  