一般是泡沫红宝石

AfD*_*Dev 1 ruby algorithm fizzbuzz

给定以下变量divisor_array,low,high定义一个方法

  1. 打印从低到高的所有数字
  2. 如果正在打印的任何数字可被任何除数数除除divisor_array,则打印数字+"fizzy"
  3. 如果打印的数字可被数组中的所有数字整除,则应输出数字+"reallyfizzy".

测试值: 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尺寸变化的工作替代方案.

Joh*_*ter 5

只计算数组中有多少除数将除以该值.我们关心的案例有三种:

  • 他们都是
  • 至少其中一个
  • 没有一个.
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)