jinmayamashita
7/11/2018 - 8:12 AM

FizzBuzz

FizzBuzz

// array [1...100]
const arr = Array.from(Array(101).keys()).slice(1)

// fizzBuzz function
const fizzBuzz = ({ number, compare, msg }) => 
  number % compare === 0 ? msg : number

// condition functions
// [...new Set(fns)].sort().pop() の部分の処理が無理やり感があるので改善が必要
const compose = (...fns) => [...new Set(fns)].sort().pop()

arr.map(num => {
  const result = compose(
    fizzBuzz({ number: num, compare: 3, msg: 'Fizz' }),
    fizzBuzz({ number: num, compare: 5, msg: 'Buzz' }),
    fizzBuzz({ number: num, compare: 15, msg: 'FizzBuzz' })
  )
  console.log(result)
})
const arr = Array.from(Array(101).keys()).slice(1)

const fizzBuzz = (number, multiple, message) => number % multiple === 0 ? message : false

// まだわかりにくいが、fizzbuzz.jsより読みやすい気がする
const compose = (fizzbuzz, fizz, buzz) => (number) => fizzbuzz || fizz || buzz || number

arr.map(num => {
  const result = compose(
    fizzBuzz(num, 15, 'FizzBuzz'),    
    fizzBuzz(num, 3, 'Fizz'),
    fizzBuzz(num, 5, 'Buzz')
  )(num)
 
  console.log(result)
})