Skip to content

Instantly share code, notes, and snippets.

@authenticsebastian
Last active February 12, 2018 11:25
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save authenticsebastian/e18362a9d808fe17acf88935e1a8dcde to your computer and use it in GitHub Desktop.
Save authenticsebastian/e18362a9d808fe17acf88935e1a8dcde to your computer and use it in GitHub Desktop.
Functional take on FizzBuzz
const processNumber = (data, condition, message) => data + (condition ? message : '');
const hasNoRemainder = (number, divider) => number % divider === 0;
const rule = (value, message) => (number, data) =>
processNumber(data, hasNoRemainder(number, value), message);
const rules = [
rule(3, 'Fizz'),
rule(5, 'Buzz')
];
const test = (number) =>
rules.reduce(
(data, testFn) => testFn(number, data),
''
) || number;
for (let i = 0; i < 20; i += 1) {
console.log(`${i}: ${test(i)}`);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment