20 lines
467 B
JavaScript
20 lines
467 B
JavaScript
// range :: Int -> Int -> [Int]
|
|
const range = (min, max) =>
|
|
Array.from({ length: max - min }, (_, i) => min + i)
|
|
|
|
const defaultRules = Object.freeze([
|
|
[3, 'Fizz'],
|
|
[5, 'Buzz'],
|
|
[7, 'Baxx'],
|
|
])
|
|
|
|
// fizzBuzz :: Int -> [[Int, String]] -> String
|
|
const fizzBuzz = (max, rules = defaultRules) =>
|
|
range(1, max + 1).map(n =>
|
|
rules.reduce((words, [factor, word]) =>
|
|
words + (n % factor ? '' : word), ''
|
|
) || n
|
|
).join('\n')
|
|
|
|
console.log(fizzBuzz(20))
|