【问题标题】:fizzbuzz question with custom (dynamic) conditions具有自定义(动态)条件的 fizzbuzz 问题
【发布时间】:2021-02-18 12:51:24
【问题描述】:

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

实现函数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,fizz,7,8,fizz,10,11,fizz,13,14,**foo** 这意味着对于 15,它只会打印 foo。但如果条件对象是:

condition = {
3: 'fizz:',
5: 'buzz',
}

那么输出将是相同的,但在 15 上它会打印“fizzbuzz”(均为 3+5)

示例:

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

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

你会怎么解决这个问题?

【问题讨论】:

  • 当我们遇到数字说 30,150 和 180
  • 自从12 = 2 * 2 * 3 之后,{2: 'boo', 3: 'fizz', 12: 'buzz'} 中的12 会做什么?是'booboofizz' 还是'buzz'

标签: javascript algorithm fizzbuzz


【解决方案1】:

我认为这是可行的

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

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));

【讨论】:

  • 1) 它只打印输入的数字,2) 对于某些输入,输出 simes 不正确,例如:n=30, condition = { 2: 'poo', 3: 'fizz', 5: '嗡嗡声',15:'foo'}
  • @itay n = 30 和条件 = { 2: 'poo', 3: 'fizz', 5: 'buzz', 15: 'foo' } 的预期输出是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多