代码之家  ›  专栏  ›  技术社区  ›  YOU

这个罗马数字到整数的转换码能更短吗?

  •  6
  • YOU  · 技术社区  · 6 年前

    python中当前有95个字节

    I,V,X,L,C,D,M,R,r=1,5,10,50,100,500,1000,vars(),lambda x:reduce(lambda T,x:T+R[x]-T%R[x]*2,x,0)
    

    >>> r("I")
    1
    >>> r("MCXI")
    1111
    >>> r("MMCCXXII")
    2222
    >>> r("MMMCCCXXXIII")
    3333
    >>> r("MMMDCCCLXXXVIII")
    3888
    >>> r("MMMCMXCIX")
    3999
    

    这不是重复的 this

    那么,有没有可能在Python中缩短这个长度,或者像ruby这样的其他语言可以缩短这个长度?

    4 回复  |  直到 6 年前
        1
  •  7
  •   A. Rex    15 年前

    来自codegolf.com的最短解决方案

    有一个“ Roman to decimal "在 Code Golf 不久以前(嗯,实际上它还在运行,因为它们永远不会结束。)一个叫 eyepopslikeamosquito 他决定赢得所有四种语言(Perl、PHP、Python和Ruby)的冠军,他就是这样做的。他写了一个由四部分组成的精彩系列“ The golf course looks great, my swing feels good, I like my chances part II , part III , part IV )描述他在 Perl Monks .

    以下是他的解决方案:

    鲁比,53杆

    n=1;$.+=n/2-n%n=10**(494254%C/9)%4999while C=getc;p$.
    

    Perl,58个笔划

    $\+=$z-2*$z%($z=10**(19&654115/ord)%1645)for<>=~/./g;print
    

    $^T 在2011年的几秒钟内发生变化!)

    $\+=$z-2*$z%($z=10**(7&$^T/ord)%1999)for<>=~/./g;print
    

    PHP,70笔画

    <?while(A<$c=fgetc(STDIN))$t+=$n-2*$n%$n=md5(o²Ûö¬Ñ.$c)%1858+1?><?=$t;
    

    小说中的六个奇怪的人物 md5(..) chr(111).chr(178).chr(219).chr(246).chr(172).chr(209)

    巨蟒,78笔画

    t=p=0
    for r in raw_input():n=10**(205558%ord(r)%7)%9995;t+=n-2*p%n;p=n
    print t
    
        2
  •  3
  •   John La Rooy    15 年前

    Python-94字符

    I,V,X,L,C,D=1,5,10,50,100,500
    M,R,r=D+D,vars(),lambda x:reduce(lambda T,x:T+R[x]-T%R[x]*2,x,0)
    
        3
  •  1
  •   barkmadley    15 年前

    98

    r=foldl(\t c->t+y c-t`mod`y c*2)0 --34
    y x=f$lookup x$zip"IVXLCDM"[1,5,10,50,100,500,1000] --52
    f(Just x)=x --12
      -- assumes correct input
    

    哈斯克尔走近了。

    import Data.Maybe --18
    r=foldl(\t c->t+y c-t`mod`y c*2)0 --34
    y x=fromJust$lookup x$zip"IVXLCDM"[1,5,10,50,100,500,1000] --59
    

    总字节数= 111

    如果我不需要从fromJust进口的话