如何定义连续的数字子集

时间:2018-02-05 10:35:52

标签: ruby

我正在尝试编写一个方法colorful?,该方法将数字作为参数,如果数字为彩色则返回true,否则返回false。 如果其数字的连续子集的所有产品都不同,则数字多彩

我写了这个:

def digits(number)
  digits = []
  number.to_s.split('').each do |digit|
    digits << digit.to_i
  end
end

def product_of_digits_subset(digits)
  products = []
  (1..digits.size).each do |i|
    (0..(digits.size) - i).each do |j|
      digits[j...(j + i)].each do |digit_subset| end
      product = 1
      product = product * digit_subset
      products << product
    end
  end
  products
end

def colorful?(number)
  digits = digits(number)
  products = product_of_digits_subset(digits)
  products == products.uniq
end

colorful?(236)

当我尝试执行此操作时,收到此错误消息:

17:in `block (2 levels) in product_of_digits_subset': undefined local variable or method `digit_subset' for main:Object (NameError)

看起来我没有正确定义连续的数字子集。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

重新格式化代码后,我得到了这个:

def digits(number)
  digits = []
  number.to_s.split('').each do |digit|
    digits << digit.to_i
  end
end

def product_of_digits_subset(digits)

  products = []
  (1..digits.size).each do |i|
    (0..(digits.size)-i).each do |j|
      digits[j...(j+i)].each do |digit_subset|
      end
      product = 1
      product = product * digit_subset
      products << product

    end
  end
  products

end

def colorful?(number)
  digits = digits(number)
  products = product_of_digits_subset(digits)

  products == products.uniq

end

p colorful?(236)

在第13行的代码中,each周期为空块体 - digit_subset仅在此空块的范围内可见,但您稍后会尝试在第16行引用它。 / p>

  digits[j...(j+i)].each do |digit_subset|
  end

为了捕获此类错误,我建议您使用适当的缩进格式化代码。