[6kyu]FizzBuzz++

该算法题来自于 codewars【语言: javascript】,翻译如有误差,敬请谅解~

[6kyu]FizzBuzz++_第1张图片

  • 相关题型 [7kyu]Fizz Buzz
    • 需要面试者实现一个函数 FizzBu​​zz,它的工作原理如下:对于1到100之间的数字,如果是3的倍数替换为fizz,如果它是5的倍数替换为buzz,同时可被3和5整除则替换为 fizzbuzz
  • 面试官惊讶于你的能力,给你一个更难的问题。
  • 任务
    • 给出一个互质数数组(即所有数字只能被自己和1整除)和一个长度相同的单词数组。计算其fizzbuzz表示,直到单词数组中的单词被全部使用。
  • 注意:
    1.如果元素的索引是从1开始,则第10个元素是 fizz + bazz ==> 10%2==0 和 10%5== 0 。
    2.返回数组的长度应为互质数组中元素的乘积。
    3.这些字符串在数组的外观上始终从左到右连接。
    4.假设第一个数组中的所有数字将始终是互质的,不需要进行验证。
  • 例如:
    fizzbuzz_plusplus([2, 3, 5], ['fizz', 'buzz', 'bazz']); // => [1, 'fizz', 'buzz', 'fizz', 'bazz', 'fizzbuzz', 7, 'fizz', 'buzz', 'fizzbazz', 11, 'fizzbuzz', 13, 'fizz', 'buzzbazz', 'fizz', 17, 'fizzbuzz', 19, 'fizzbazz', 'buzz', 'fizz', 23, 'fizzbuzz', 'bazz', 'fizz', 'buzz', 'fizz', 29 , 'fizzbuzzbazz']

  • 解答
  • 其一
// [...Array(n+1).keys()].slice(1) 可以获取1-n的连续数字
function fizzbuzzPlusPlus(numbers, words) {
      let nums = [...Array(numbers.reduce((sum,value) => sum * value,1)+1).keys()].slice(1);
      return nums.map(el => {
        let result;
        for (let i=0;i
  • 其二
function fizzbuzzPlusPlus(n, w) {
      return [...Array(n.reduce((a,b)=>a*b)).keys()].map((x)=>{
        let b=n.map((e,i)=>(x+1)%e==0 ? w[i] :'').filter(x=>x!=='')
        if(b.length==0) return x+1
        return b.join('')
      });
}
  • 其三
function fizzbuzzPlusPlus(nums, words) {
      return Array
        .from({length: nums.reduce((a,b) => a * b, 1)})
        .map((_,i) => nums
          .filter(v => (i + 1) % v === 0)
          .map(v => words[nums.indexOf(v)])
          .join('') || i + 1
        );
}
  • 其四
function fizzbuzzPlusPlus(numbers, words) {
      let result = [];
      for (let i = 1, total = numbers.reduce((p, c) => p * c); i <= total; i++) {
        result.push(numbers.reduce((p, c, u) => i % c === 0 ? p + words[u] : p, "") || i);
      }
      return result;
}

你可能感兴趣的:([6kyu]FizzBuzz++)