AfD*_*Dev 1 ruby algorithm fizzbuzz
给定以下变量divisor_array,low,high定义一个方法
divisor_array,则打印数字+"fizzy"测试值: generally_fizzy([2,3],1,7)
我最初的解决方案
def generally_fizzy(divisor_array, low, high)
divisors = Hash[*divisor_array]
low.upto(high) do |i|
divisors.each_pair do |k,v|
if((i % k == 0) && (i % v == 0))
puts "#{i} reallyfizzy"
elsif ((i % k == 0) || (i % v == 0))
puts "#{i} fizzy"
else
puts i
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
这个解决方案通过了给定的测试,但是当divisor_array大小从2个值增加到3个以上时,它会打印出重复的内容.除此之外,代码不是很优雅.
寻找可以处理divisor_array尺寸变化的工作替代方案.
只计算数组中有多少除数将除以该值.我们关心的案例有三种:
def fizzy(divisors, lo, hi)
lo.upto(hi) do |value|
puts case divisors.count{ |div| value % div == 0 }
when divisors.length # all divisors
"#{value} really fizzy"
when 0 # no divisors
value
else # at least one divisor
"#{value} fizzy"
end
end
end
Run Code Online (Sandbox Code Playgroud)