我有一个编码的挑战:检查是否给定的正阵列的数字的力量2
,如果是返回1
,否则0
。 前
我想出了这个功能。
def checkPw (arr)
arr.map{|a| a != 0 && (a%2==0)?1 :0 }
end
此功能通过提供的测试,但我不知道这是否是干净的方式来做到这一点。 我想知道是否有更明确的方法来检查数组元素的力量。
有检查的一招,如果一个正整数是,如果按位和比较2的幂x
和x - 1
为零。 所以,你可以做一个数组下a
检查每一个元素是2的幂:
a.all?{|x| x & (x - 1) == 0}
例子:
[2048, 2048, 1048576].all?{|x| x & (x - 1) == 0}
=> true
[1048, 2048, 1048576].all?{|x| x & (x - 1) == 0}
=> false
如果你想为每个元素的检查:
a.map{|x| x & (x - 1) == 0 ? 1 : 0}
其他方式:
def po2?(arr)
arr.map { |n| (n.to_s(2) =~ /^10*$/) ? 1 : 0 }
end
po2? [1,2,4,7,1024,1025]
#=> [1,1,1,0,1,0]
例如,
n = 1024
s = n.to_s(2)
#=> "10000000000"
s =~ /^10*$/)
#=> true
n = 1025
s = n.to_s(2)
#=> "10000000001"
s =~ /^10*$/)
#=> false
你可以使用一些技巧来确定解决方案,但也有一个Ruby方法专门找到电源的-2特定号码是什么。 您可以检查此方法的输出是一个整数与否,即:
array.map { |number| (Math.log2(number) % 1) == 0 ? 1 : 0 }