【问题标题】:Roman Numerals Decoder: Ruby罗马数字解码器:Ruby
【发布时间】:2020-12-28 19:33:56
【问题描述】:

好吧,我已经为这个编码挑战工作了很长一段时间,我想现在是我正式举旗的时候了。救命!

我的任务是创建一个以罗马数字为参数并将其值作为十进制整数返回的函数。

到目前为止,我已经成功创建了一个将数字映射到其数值的哈希。我还创建了一个空数组roman_no 来传递键/值对。

我正在努力写表达式。以下是完整代码:

def solution(roman)
 # take a value of a roman numeral 
 roman_numeral =
    {
      1000 => "M", 
      900 => "CM",
      500 => "D",
      400 => "CD",
      100 => "C",
       90 => "XC",
       50 => "L", 
       40 => "XL",
       10 => "X", 
        9 => "IX",
        5 => "V", 
        4 => "IV",
        1 => "I" 
      }

roman_no = Array.new
  
roman_numeral.each do | key, value | 
  while 
    "#{roman}" >= "#{key}"
      += roman_no 
    "#{roman}" -= "#{key}"
    end
  
return roman_no

  
 
solution('XXI')

如何编写一个参数,从 roman_numeral 获取值并返回其数字计数器部分?

例如:

solution('XXI') # should return 21

【问题讨论】:

  • 那么您的问题是什么?代码审查建议或您的代码无法运行?
  • 我刚刚添加了问题。谢谢
  • 您确定代码应该以这种方式转换吗(solution('XXI') == 21?)您获得的半完成代码似乎正朝着另一个方向转换(@987654327 @)。此外,到目前为止,您提供的内容显然无效——它缺少end 并包含神秘的空白行:+= roman_no。如果您正在从头开始寻找完整的解决方案,那么这很容易在谷歌上搜索;如果您正在寻找使 您的 解决方案正常工作的指针,那么我只想确保我们都在同一页面上了解您正在尝试做的事情
  • (而且您提供的代码真的是您编写的最新、最完整的版本吗?!)

标签: ruby string algorithm parsing


【解决方案1】:
def solution(roman)
  mapping = {
     "M"=>1000,
     "D"=>500,
     "C"=>100,
     "L"=>50,
     "X"=>10,
     "V"=>5,
     "I"=>1
  }
  # split string into characters
  roman.chars.map do |l|
    mapping[l] # replace character with integer value
  end
  .compact # removes potential nils caused by  invalid chars
  # Splits array into chunks so that we can handle numerals such as IIX
  .chunk_while do |i,j|
    i <= j #
  end
  # each chunk will be an array like [10, 10, 100] or [1, 1, 1, 1]
  .map do |chunk| 
    if chunk.first < chunk.last
      chunk.reverse.inject(:-) # handles numerals such as IIX with subtraction
    else
      chunk.sum # chunk is just a list of numerals such as III
    end
  end
  .sum # sums everything up
end

【讨论】:

  • 附言。记住,如果你得到这份工作,你欠我 10% 的未来薪水。
  • 这是一个很好的“单线”?我通常用循环来实现。
  • @SergioTulentsev “有效”是一种解释问题,因为罗马帝国并没有完全落后于 ISO 标准。 en.wikipedia.org/wiki/…
  • 哈哈谢谢麦克斯!肯定会再过几次=D
猜你喜欢
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
相关资源
最近更新 更多