【发布时间】:2019-08-30 01:53:58
【问题描述】:
我正在编写一个方法roman_to_integer(roman_string),它将罗马数字转换为其整数:'IV' 转换为 4,'XVI' 转换为 16,等等。
ROMAN_TO_INT = {
"I" => 1,
"IV" => 4,
"V" => 5,
"IX" => 9,
"X" => 10,
"XL" => 40,
"L" => 50,
"XC" => 90,
"C" => 100,
"CD" => 400,
"D" => 500,
"CM" => 900,
"M" => 1000
}
def roman_to_integer(roman_string)
# TODO: translate roman string to integer
number = 0
str = roman_string.dup
until str.size.zero?
last_two_characters = str.slice(-2, 2)
if ROMAN_TO_INT.key?(last_two_characters)
number += ROMAN_TO_INT[last_two_characters]
str.chop!
else
number += ROMAN_TO_INT[str.slice(-1)]
end
str.chop!
end
number
end
我怎样才能使我的方法更短? Rubocop 只允许 10 行。我正在尝试,但总是以至少 13 个结尾。
【问题讨论】:
-
诀窍是缩短您的
ROMAN_CONVERTER哈希并在您的方法中处理更多案例。请注意,IV、IX、XC等都遵循相同的模式:“较小”符号后跟“较大”符号表示您从较大的符号中减去较小的符号。如果您在方法中使用 3 行或更少的行来处理此问题,则可以将散列缩小 6,从而达到 10 行的目标。
标签: ruby refactoring