带有自定义动态条件的 fizzbuzz 问题

问题描述

最近我收到了一个不同版本的“fizzbuzz 问题”,要求您这样做:

实现函数fizzBuzz(n,conditions) 其中 n 是整数,条件是 key: value (number: string) 的映射

您需要运行从 1 到 n 的所有数字,并且对于每个数字,您需要检查它满足哪些条件,如果不满足,则打印数字,但如果满足条件 X,则可以从 Y 中获取 X * Z 然后打印唯一的 X 而不是 Y * Z

示例:

input: n = 100
condition = {
3: 'fizz:',5: 'buzz',15: 'foo'
}

将打印:1,2,fizz,4,buzz,7,8,10,11,13,14,**foo** 这意味着对于 15,它只会打印 foo。但如果条件对象是:

condition = {
3: 'fizz:',}

然后输出将是相同的,但在 15 上它会打印 'fizzbuzz'(都是 3+5)

示例:

condition = {
2: 'boo',3: 'fizz:',}

对于 30,它将打印 boofizzbuzz (2+3+5)

你会如何解决这个问题?

解决方法

我认为这是有效的

编辑:我以为这只是输入的数字。

const n = 100
const condition = {
  2: 'poo',3: 'fizz',5: 'buzz',15: 'foo'
}

function fizzBuzz(n,condition){
  const fizzOrNumber = i => {
    const text = Object.keys(condition).reduce((acc,item) => {
      return i % parseInt(item) == 0 ? acc+condition[item] : acc;
    },'');
    return text || i; 
  };

  let results = [];
  for(let i=1; i<n; i+=1){
    const item = Object.keys(condition).includes(`${i}`) ? condition[i] : fizzOrNumber(i);
    results.push(item);
  }

  return results.join(',');
}

console.log(fizzBuzz(n,condition));