Nodejs CoffeeScript版FizzBuzzWhizz
Nodejs CoffeeScript版FizzBuzzWhizz
[fizz, buzz, whizz] = [3, 5, 7]
wordOf = (num) ->
if ~"#{num}".indexOf fizz
‘Fizz’
else
[‘Fizz’ unless num % fizz] + [‘Buzz’ unless num % buzz] + [‘Whizz’ unless num % whizz]
console.log (wordOf num) or num for num in [1…100]
Nodejs CoffeeScript版FizzBuzzWhizz
问题背景
FizzBuzzWhizz 是一个经典的编程问题的变种。原始的 FizzBuzz 游戏要求你从 1 数到 N,对于能被 3 整除的数字输出 “Fizz”,能被 5 整除的数字输出 “Buzz”,能同时被 3 和 5 整除的数字则输出 “FizzBuzz”。而 FizzBuzzWhizz 在此基础上增加了一个新的规则,即对于能被 7 整除的数字输出 “Whizz”。
示例代码
# 定义三个因子
[fizz, buzz, whizz] = [3, 5, 7]
# 定义一个函数 wordOf,根据输入的数字返回对应的字符串
wordOf = (num) ->
# 检查数字是否包含特定的字符
if "#{num}".indexOf(fizz.toString()) >= 0
return 'Fizz'
else
# 使用列表推导式来生成结果列表
result = [
'Fizz' unless num % fizz is 0
'Buzz' unless num % buzz is 0
'Whizz' unless num % whizz is 0
]
# 过滤掉空字符串,并将结果列表合并为一个字符串
result = (str for str in result when str?).join('')
return result or num
# 输出从 1 到 100 的结果
console.log (wordOf num) or num for num in [1..100]
解释
-
定义因子:
[fizz, buzz, whizz] = [3, 5, 7]这里定义了三个因子
fizz、buzz和whizz,分别代表 3、5 和 7。 -
定义
wordOf函数:wordOf = (num) -> if "#{num}".indexOf(fizz.toString()) >= 0 return 'Fizz' else result = [ 'Fizz' unless num % fizz is 0 'Buzz' unless num % buzz is 0 'Whizz' unless num % whizz is 0 ] result = (str for str in result when str?).join('') return result or num- 首先检查数字
num是否包含因子fizz(例如,数字中是否包含字符 ‘3’)。 - 如果包含,则直接返回 “Fizz”。
- 否则,使用列表推导式生成一个包含可能的结果的列表(如 “Fizz”, “Buzz”, “Whizz”),并过滤掉空字符串。
- 将过滤后的结果列表合并成一个字符串,并返回该字符串或原数字
num。
- 首先检查数字
-
循环输出结果:
console.log (wordOf num) or num for num in [1..100]这行代码遍历从 1 到 100 的所有数字,并调用
wordOf函数来获取每个数字的输出结果,然后打印出来。
通过上述代码,你可以看到如何使用 CoffeeScript 来实现一个扩展的 FizzBuzzWhizz 游戏。
我讨厌这种强制缩进的语法…
有可能最后生成的js不是你想要的,也有可能使用姿势不对 哈哈
这个CoffeeScript代码实现了一个扩展版本的FizzBuzz问题,称为FizzBuzzWhizz。在这个问题中,除了通常的Fizz(3的倍数)和Buzz(5的倍数)之外,还增加了一个新的条件Whizz(7的倍数)。如果一个数字同时满足多个条件,则结果为这些词的组合。
下面是代码的详细解释:
# 定义规则因子
[fizz, buzz, whizz] = [3, 5, 7]
# 定义函数 wordOf,输入一个数字 num,返回对应的字符串或数字
wordOf = (num) ->
# 如果 num 的字符串表示包含 '3',则返回 'Fizz'
if "#{num}".includes(fizz.toString())
'Fizz'
else
result = []
# 如果 num 是 fizz 的倍数,则添加 'Fizz'
result.push('Fizz') unless num % fizz
# 如果 num 是 buzz 的倍数,则添加 'Buzz'
result.push('Buzz') unless num % buzz
# 如果 num 是 whizz 的倍数,则添加 'Whizz'
result.push('Whizz') unless num % whizz
# 如果结果为空,则返回 num;否则返回结果数组中的所有元素拼接后的字符串
result.join('') or num
# 对于从 1 到 100 的每个数字,调用 wordOf 函数并打印结果
console.log (wordOf num) for num in [1..100]
这段代码使用了 CoffeeScript 语法,定义了一个名为 wordOf 的函数,该函数根据输入数字的不同条件返回不同的字符串。对于从 1 到 100 的每个数字,调用 wordOf 函数并将其结果打印到控制台。

