Skip to content

Instantly share code, notes, and snippets.

@florabtw
Last active December 19, 2019 04:23
Show Gist options
  • Save florabtw/8e36daa5e134d110201a6f5057b6e38f to your computer and use it in GitHub Desktop.
Save florabtw/8e36daa5e134d110201a6f5057b6e38f to your computer and use it in GitHub Desktop.
Web-Scale FizzBuzz
const operations = [
number => number % 3 === 0 && number % 5 === 0 && 'FizzBuzz',
number => number % 3 === 0 && 'Fizz',
number => number % 5 === 0 && 'Buzz',
number => number
];
const toFizzBuzz = number =>
operations.reduce((out, fn) => out || fn(number), false);
const fizzBuzz = numbers => {
const encoded = numbers.map(toFizzBuzz);
for (code of encoded) {
console.log(code);
}
};
const numbers = [...new Array(100)].map((_, i) => i + 1);
fizzBuzz(numbers);
/* Pretty much same as above, but harder to read
* I did this because I wanted a solution where modulo is only checked once per number
*/
const operations = [
number => (number % 3 === 0 && 'Fizz') || '',
number => (number % 5 === 0 && 'Buzz') || ''
];
const toFizzBuzz = number =>
operations.reduce((out, fn) => out + fn(number), '') || number;
const fizzBuzz = numbers => {
const encoded = numbers.map(toFizzBuzz);
for (code of encoded) {
console.log(code);
}
};
const numbers = [...new Array(100)].map((_, i) => i + 1);
fizzBuzz(numbers);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment