Ruby 围绕彩色数字的方法

Ruby 围绕彩色数字的方法,ruby,Ruby,我应该为is\u color\u number?编写一个返回true或false的方法 263是一个彩色数字,因为(2,6,3,2x6=12,6x3=18,2x6x3=36)都是不同的 236不是因为(2,3,6,2x3=6,3x6=18,2x3x6=36)有6两次 这没有道理。我遗漏了什么?解决该问题的算法如下: 提取数字的数字数组 在该数组中查找您感兴趣的所有组合(使用数组#每个组合) 计算每个组合的乘积 检查这些产品是否独一无二 以下是实施的一个示例: def colors(num

我应该为
is\u color\u number?
编写一个返回
true
false
的方法

  • 263是一个彩色数字,因为(2,6,3,2x6=12,6x3=18,2x6x3=36)都是不同的
  • 236不是因为(2,3,6,2x3=6,3x6=18,2x3x6=36)有6两次

这没有道理。我遗漏了什么?

解决该问题的算法如下:

  • 提取数字的数字数组
  • 在该数组中查找您感兴趣的所有组合(使用
    数组#每个组合
  • 计算每个组合的乘积
  • 检查这些产品是否独一无二
以下是实施的一个示例:

def colors(number)
  digits = number.digits
  (1..digits.length).map do |len|
    digits.each_cons(len).map { |slice| slice.inject(:*) }
  end.flatten
end

def is_colorful_number?(number)
  number_colors = colors(number)
  number_colors.length == number_colors.uniq.length
end

p is_colorful_number? 263
p is_colorful_number? 236
=给定数字(作为整数),将数字提取到数组中,然后反转:

number = 263
ary = number.digits.reverse #=> [2, 6, 3]
现在,从1到array length by获得包含产品的数组

products = ary.length.times.map.with_object([]) { |n, a| a.concat ary.each_cons(n+1).map { |e| e.reduce(&:*) } }
#=> [2, 6, 3, 12, 18, 36]
最后检查产品是否包含重复项,例如:

products.size == products.uniq.size

请把你的问题说清楚。我下次会尽量说得更清楚。我知道如何创建方法tho。我的问题(我试图通过添加所有额外的文本来澄清)是彩色数字本身的概念对我来说并不清楚。所举的例子毫无意义。我要求对这些进行解释。请恢复我原来的帖子,我会尽量把我的意思弄清楚。谢谢你,但那不是我想要的:)谢谢,但那不是我想要的:)