罗马数字二
* * * *
拉格朗日计划
* * * *
罗马数字二

将给定的罗马数字写成阿拉伯数字的形式并打印。

给定的数字在1到3999之间,涉及的编码如下:

$$ \begin{matrix} 阿拉伯: & 1 & 5 & 10 & 50 & 100 & 500 & 1000 \\ 罗马:& I & V & X & L & C & D & M \end{matrix} $$
本题难度:



解答

查找当前数值最大的字母,并对该字母的左右两侧分别递归求值即可。

最终代码行有六行。

代码长度:170字节 vs. 全站第一:98字节。

import sys
def v(t):
  for i in range(7):
  if(k:=t.find("MDCLXVI"[i]))>=0:return[1000,500,100,50,10,5,1][i]+v(t[k+1:])-v(t[:k])
  return 0
*map(print,map(v,sys.argv[1:])),