我正在研究RubyMonk中一个名为“Kaprekar's Number”的问题。例如,9^2
为81,结果又为9:8 + 1 = 9
。
在问题的一部分中,他们使用了我不太懂的双点表示法:
def kaprekar?(k)
number_of_digits = k.to_s.size
square_root = (k**2).to_s
second_half = square_root[-number_of_digits..-1]
first_half = square_root.size.even? ? square_root[0..number_of_digits-1] : square_root[0..number_of_digits-2]
k == first_half.to_i + second_half.to_i
end
例如,在second_half
和first_half
中,我知道first_half
是一个三元操作“if?then:else”,但是[-number_of_digits..-1]
或{{ 1}}意味着什么?
这是表达范围之类的东西吗?
答案 0 :(得分:4)
双点表示法表示范围。
因此,举例来说,1..10
就像是说"从1到10"。
当与数组一起使用时,它通常表示一系列数组索引。
因此,如果你有my_array[1..10]
,它将是my_array
的元素,索引从1到10。"
在数组索引范围内使用负数时,它表示从数组右端开始计数的数字。因此" -1"是来自右端的第一个数组索引。
因此,对于您的具体示例:square_root
是一个字符串(有点像字符数组)...所以square_root[0..number_of_digits-1]
表示" {{1}中的字符}字符串从0(开头)到square_root
",(number of digits - 1)
表示" square_root[number_of_digits..-1]
字符串中的字符,从square_root
开始,上升到字符串的末尾。"
number_of_digits
和square_root[0..number_of_digits-1]
表示将字符串拆分为square_root[number_of_digits..-1]
所代表的一半。