Guest User

Untitled

a guest
Jan 20th, 2019
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. // consolidates and closes the chain result
  2. const closer = (value, text) => text || value;
  3. // Composable (fizz, buzz, zazz)....zers
  4. const fizzer = next => (value, text = '') => next(value, `${text}${value % 3 === 0 ? 'Fizz' : ''}`);
  5. const buzzer = next => (value, text = '') => next(value, `${text}${value % 5 === 0 ? 'Buzz' : ''}`);
  6. const zazzer = next => (value, text = '') => next(value, `${text}${value % 7 === 0 ? 'Zazz' : ''}`);
  7. // function composer
  8. const compose = (...zers) => zers.reduceRight((acc, zer) => zer(acc), closer);
  9. // composed functions
  10. const fizzBuzz = compose(fizzer, buzzer);
  11. const buzzFizz = compose(buzzer, fizzer);
  12. const fizzZazz = compose(fizzer, zazzer);
  13. // testing
  14. const range = Array(25).fill().map((_, i) => i + 1);
  15. console.log(range.map(n => fizzBuzz(n)));
  16. // 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"
  17. console.log(range.map(n => buzzFizz(n)));
  18. // 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"
  19. console.log(range.map(n => fizzZazz(n)));
  20. // 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