ruby - 通常是 Fizzy ruby

标签 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

此解决方案通过了给定的测试,但是当 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

关于ruby - 通常是 Fizzy ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21238491/

相关文章:

ruby-on-rails - Rails 在哪里存储夏令时的开始和结束日期?

ruby - 如何匹配一堆数字后的非字母和非数字?

Python:获取具有> = 3个奇数 "Recursively"的列表列表的数量

算法匹配两个数据集的类分布

javascript - 无法理解以下代码中 FizzBu​​zz 的最后条件

C++ lambda 和内联 fizzbuzz

performance - FizzBu​​zz 程序似乎很慢 : why?

ruby-on-rails - 基于 Rails 环境设置变量

java - 减少使用实例变量以减少内存的使用

ruby-on-rails - 带有条件的热切加载嵌套关联