Ruby-查看数字的倍数是否与原始数字具有完全相同的数字(重新排列)
我有一个数字,我想看看我是否用一个实数乘以这个数字,如果新的数字和以前的数字完全相同,只需要重新排列。例如,如果我想将一个数字乘以2,看看数字是否保持不变,我会这样做Ruby-查看数字的倍数是否与原始数字具有完全相同的数字(重新排列),ruby,algorithm,range,permutation,digit,Ruby,Algorithm,Range,Permutation,Digit,我有一个数字,我想看看我是否用一个实数乘以这个数字,如果新的数字和以前的数字完全相同,只需要重新排列。例如,如果我想将一个数字乘以2,看看数字是否保持不变,我会这样做 125874 => 251748 251748是125874乘以2,两个数字的数字完全相同,只是重新排列。为了简单起见,我现在只测试2的倍数。这就是我试图做的,但失败了 x = 125874 array = x.to_s.chars.map{|x|x.to_i} => [1,2,5,8,7,4] array.pe
125874
=> 251748
251748是125874乘以2,两个数字的数字完全相同,只是重新排列。为了简单起见,我现在只测试2的倍数。这就是我试图做的,但失败了
x = 125874
array = x.to_s.chars.map{|x|x.to_i}
=> [1,2,5,8,7,4]
array.permutation.include?((x * 2).to_s.chars.map{|x|x.to_i}
=> true
现在,我试着在一个循环中运行它,以查找所有低于100000的符合此标准的数字
range = (1..100000).to_a
range.select do |x|
array = x.to_s.chars.map{|x|x.to_i}
array.permutation.include?((x * 2).to_s.chars.map{|x|x.to_i}
end
=> []
现在,它应该在该数组中至少记录了125874,因为125874*2等于251748,这是125874的排列
在这一点上,我想我已经把自己弄糊涂了。首先假设,如果给定的数字包含重复的数字,我们要求数字和乘法器的数字和乘积包含两个数字中出现的每个数字的相同数字:
def same_digits?(nbr, mult)
nbr.to_s.chars.sort == (nbr * mult).to_s.chars.sort
end
same_digits?(125874,2) #=> true (125874*2 => 251748)
same_digits?(125874,3) #=> false (125874*3 => 377622)
如果nbr
和nbr*prod
必须包含相同的数字,但每个数字的数字不一定相同,则方法仅略有不同:
def same_digits?(nbr, mult)
nbr.to_s.chars.uniq.sort == (nbr * mult).to_s.chars.uniq.sort
end
same_digits?(10255,2) #=> true (10255*2 => 20510)
same_digits?(10255,3) #=> false (10255*3 => 30765)
在第二种情况下,有许多其他方法可以在删除重复项后确定两个数组是否包含相同的元素。让我们:
a = nbr.to_s.chars.uniq
b = (nbr*mult).to_s.chars.uniq
上面我使用了a.sort==b.sort
来检查匹配。以下是一些其他方法:
(a&b)==a && (a&b)==b # Array intersection
(a-b).empty? && (b-a).empty? # Array difference
require 'set'
a.to_set == b.to_set
如果你发现我的答案(8月4日的唯一答案)有帮助,考虑选择它。