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

Language agnostic 这个罗马数字到整数的转换码能更短吗?,language-agnostic,roman-numerals,Language Agnostic,Roman Numerals,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) 下面是一些测试结果,它应该适用于1到3999(假设输入仅为有效字符) 这不是重复的,这是相反的 那么,有没有可能在Python中缩短这个长度,或者像ruby这样的其他语言可以缩短这个长度呢?采用: 在我的自定义编程语言“CPL1839079”中,它是3个字节: r=f 实

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)
下面是一些测试结果,它应该适用于1到3999(假设输入仅为有效字符)

这不是重复的,这是相反的

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

采用:

在我的自定义编程语言“CPL1839079”中,它是3个字节:

r=f

实际上,定义我自己的fromJust更小,总共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

Python-94字符,那么这个值应该是93 廉价镜头:)

来自codegolf.com的最短解决方案 不久前有一场比赛。(嗯,实际上它还在运行,因为它们永远不会结束。)一位名叫的Perl高尔夫球手决定赢得所有四种语言(Perl、PHP、Python和Ruby),他就是这样做的。他写了一个引人入胜的由四部分组成的系列文章“(,”),描述了他在美国的做法

以下是他的解决方案:

鲁比,53杆 Perl,58个笔划 PHP,70笔画
您可以像这样利用反向解决方案<范围(14000)内x的代码>:如果intToRoman(x)=输入:中断;)投票结束这一事实,即您正试图获得更好的代码高尔夫解决方案,我打赌;)不是真的…Imm,我喜欢看到各种实现和各种语言,仅此而已。这是我自己的实现。我相信有很多极客可以做得更好。这就是我发布这个的原因。我投票结束这个问题,因为这不是代码高尔夫。是的,如果有内置函数,它总是更短。顺便说一句,负号不是你的自定义编程语言必须是图灵完整的,否则就不算了。把代码交出来,我会投票给你:)乔伊:实际上,CPL1839079是Python,标准库中包含了gnibbler的程序(用f代替r)。没什么大不了的,不是吗?哦,谢谢,我以前找不到,所以我最好接受这个。是的,不幸的是,因为codegolf.com比赛永远不会结束,你看不到其他人在做什么。碰巧eyepopslikeamosquito在别处透露了他的解决方案。。。
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
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)
n=1;$.+=n/2-n%n=10**(494254%C/9)%4999while C=getc;p$.
$\+=$z-2*$z%($z=10**(19&654115/ord)%1645)for<>=~/./g;print
$\+=$z-2*$z%($z=10**(7&$^T/ord)%1999)for<>=~/./g;print
<?while(A<$c=fgetc(STDIN))$t+=$n-2*$n%$n=md5(o²Ûö¬Ñ.$c)%1858+1?><?=$t;
t=p=0
for r in raw_input():n=10**(205558%ord(r)%7)%9995;t+=n-2*p%n;p=n
print t