这种解决 Fizzbuzz 挑战的方法叫什么?
What is this way of resolving the Fizzbuzz challenged called?
我是编程新手,目前正在做 FizzBuzz 测试,起初看起来很简单,但我们有一些要求来执行它:
- 我只能用一个
if
。无多分支,三元
运算符或 else
.
- 单元测试。
我是用switch语句搞定的,网上查了一下,发现这种方式比较短,但是不清楚这个FizzBuzz挑战的解决过程是怎样的。
这是代码:
var i, values = [, , 'fizz', , 'buzz', 'fizz', , , 'fizz', 'buzz', , 'fizz', , , 'fizzbuzz'];
for (i = 0; i < 100; console.log(values[i++ % 15] || i));
如果有人理解这种解决 FizzBuzz 挑战的方法,我将不胜感激。
它被称为"lookup table"。响应模式每 15 个数字循环一次所有可能性,因为这是 3
和 15
的最小公倍数。所以我们以 15 为模计算数字,并将其用作包含所有 15 种可能性的数组的索引。
数组中的空白元素用于打印数字本身,而不是 fizz
或 buzz
。留下一个数组元素大致相当于指定undefined
作为值,所以这只是一种较短的写法
values = [undefined, undefined, 'fizz', undefined, 'buzz', 'fizz', undefined, undefined, 'fizz', 'buzz', undefined, 'fizz', undefined, undefined, 'fizzbuzz'];
由于 undefined
是错误的,只要数组元素未填充其中一个字符串,values[i++ % 15] || i
就会是 i
。
我是编程新手,目前正在做 FizzBuzz 测试,起初看起来很简单,但我们有一些要求来执行它:
- 我只能用一个
if
。无多分支,三元 运算符或else
. - 单元测试。
我是用switch语句搞定的,网上查了一下,发现这种方式比较短,但是不清楚这个FizzBuzz挑战的解决过程是怎样的。
这是代码:
var i, values = [, , 'fizz', , 'buzz', 'fizz', , , 'fizz', 'buzz', , 'fizz', , , 'fizzbuzz'];
for (i = 0; i < 100; console.log(values[i++ % 15] || i));
如果有人理解这种解决 FizzBuzz 挑战的方法,我将不胜感激。
它被称为"lookup table"。响应模式每 15 个数字循环一次所有可能性,因为这是 3
和 15
的最小公倍数。所以我们以 15 为模计算数字,并将其用作包含所有 15 种可能性的数组的索引。
数组中的空白元素用于打印数字本身,而不是 fizz
或 buzz
。留下一个数组元素大致相当于指定undefined
作为值,所以这只是一种较短的写法
values = [undefined, undefined, 'fizz', undefined, 'buzz', 'fizz', undefined, undefined, 'fizz', 'buzz', undefined, 'fizz', undefined, undefined, 'fizzbuzz'];
由于 undefined
是错误的,只要数组元素未填充其中一个字符串,values[i++ % 15] || i
就会是 i
。