Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // consolidates and closes the chain result
- const closer = (value, text) => text || value;
- // Composable (fizz, buzz, zazz)....zers
- const fizzer = next => (value, text = '') => next(value, `${text}${value % 3 === 0 ? 'Fizz' : ''}`);
- const buzzer = next => (value, text = '') => next(value, `${text}${value % 5 === 0 ? 'Buzz' : ''}`);
- const zazzer = next => (value, text = '') => next(value, `${text}${value % 7 === 0 ? 'Zazz' : ''}`);
- // function composer
- const compose = (...zers) => zers.reduceRight((acc, zer) => zer(acc), closer);
- // composed functions
- const fizzBuzz = compose(fizzer, buzzer);
- const buzzFizz = compose(buzzer, fizzer);
- const fizzZazz = compose(fizzer, zazzer);
- // testing
- const range = Array(25).fill().map((_, i) => i + 1);
- console.log(range.map(n => fizzBuzz(n)));
- // 1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14, "FizzBuzz", 16, 17, "Fizz", 19, "Buzz", "Fizz", 22, 23, "Fizz", "Buzz"
- console.log(range.map(n => buzzFizz(n)));
- // 1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14, "BuzzFizz", 16, 17, "Fizz", 19, "Buzz", "Fizz", 22, 23, "Fizz", "Buzz"
- console.log(range.map(n => fizzZazz(n)));
- // 1, 2, "Fizz", 4, 5, "Fizz", "Zazz", 8, "Fizz", 10, 11, "Fizz", 13, "Zazz", "Fizz", 16, 17, "Fizz", 19, 20, "FizzZazz", 22, 23, "Fizz", 25
Add Comment
Please, Sign In to add comment