当前位置:  开发笔记 > 编程语言 > 正文

Code Golf新年版 - 罗马数字的整数

如何解决《CodeGolf新年版-罗马数字的整数》经验,为你挑选了6个好方法。

编写一个程序,该程序采用单个命令行参数N并打印出相应的罗马数字.

例如,N = 2009应打印MMIX.

假设这应该适用于0

(玩得开心玩圣诞版我的第一轮代码高尔夫,并认为这可能适合新年.用Google搜索,看看它是否已经出现在其他地方,看起来它没有,但让我知道这是否太难或太容易,或者规则需要改变.)

快乐的MMIX!



1> A. Rex..:

Perl:69招(伯爵!)

包括首先调用perl的69 个笔画:

$ perl -ple's!.!($#.=5x$&*8%29628)=~y$IVCXL4620-8$XLMCDIXV$d!eg;last}{'
3484
MMMCDLXXXIV

读一行,写一行.

工作范围从0到3999,包括在内.(打印空字符串为0)

在Perl高尔夫比赛中,这通常被评为62杆= 58代码+ 4代表开关.

为什么,是的,那些不匹配的括号.谢谢你的询问.=)

致谢:原来由于Ton Hospel.涉及括号不匹配的诀窍是rev.pl在这个职位(其中顺便说一句,巧妙的).



2> jason..:

在C#中,作为扩展方法Int32:

public static class Int32Extension {
    public static string ToRomanNumeral(this int number) {
        Dictionary lookup = new Dictionary() {
            { 1000000, "M_" },
            { 900000, "C_D_" },
            { 500000, "D_" },
            { 400000, "C_D_" },
            { 100000, "C_" },
            { 90000, "X_C_" },
            { 50000, "L_" },
            { 40000, "X_L_" },
            { 10000, "X_" },
            { 9000, "MX_"},
            { 5000, "V_" },
            { 4000, "MV_" },
            { 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" }
        };

        StringBuilder answer = new StringBuilder();
        foreach (int key in lookup.Keys.OrderBy(k => -1 * k)) {
            while (number >= key) {
                number -= key;
                answer.Append(lookup[key]);
            }
        }
        return answer.ToString();
    }
}

下划线应该在相应的字母上面拼写为真正的罗马数字.



3> user49117..:

常见的lisp(SBCL).由"wc -c"计算的63个字符.

(format t "~@R~%" (parse-integer (elt *posix-argv* 1)))
(quit)

这仅适用于最高3999的数字.


关于Perl正则表达式,没有人这么说过.如果一种语言做某事是微不足道的,你应该这样做.这是使编码成为艺术的部分原因.
使用内置是作弊;-)

4> BenAlabaster..:

C#:179个字符(不包括空格/制表符)

    static string c(int a)
    {
        int[] v = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
        var s = ""; 
        for ( var i = 0; i < 13; i++ )
            while (a >= v[i])
            {
                a -= v[i];
                s += "M CM D CD C XC L XL X IX V IV I".Split()[i];
            }
        return s;
    }



5> Chris Jester..:

Perl,19招.保证适用于1到12之间的值.

sub r{chr 8543+pop}



6> Tomasz Elend..:

语言:JavaScript.

没有添加格式的129个字符

以下代码是pl.comp.lang.javascript几年前在newsgrup 发生的编码测验的结果.我不是代码的作者.

function rome(N,s,b,a,o){
  for(s=b='',a=5;N;b++,a^=7)for(o=N%a,N=N/a^0;o--;)
  s='IVXLCDM'.charAt(o>2?b+N-(N&=~1)+(o=1):b)+s;return s
}

Elus的原帖

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有