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

use*_*812 17 language-agnostic code-golf roman-numerals rosetta-stone

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

例如,N = 2009应打印MMIX.

假设这应该适用于0 <N <3000.

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

快乐的MMIX!

A. *_*Rex 17

Perl:69招(伯爵!)

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

$ perl -ple's!.!($#.=5x$&*8%29628)=~y$IVCXL4620-8$XLMCDIXV$d!eg;last}{'
3484
MMMCDLXXXIV
Run Code Online (Sandbox Code Playgroud)
  • 读一行,写一行.
  • 工作范围从0到3999,包括在内.(打印空字符串为0)
  • 在Perl高尔夫比赛中,这通常被评为62杆= 58代码+ 4代表开关.
  • 为什么,是的,那些不匹配的括号.谢谢你的询问.=)

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


jas*_*son 14

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

public static class Int32Extension {
    public static string ToRomanNumeral(this int number) {
        Dictionary<int, string> lookup = new Dictionary<int, string>() {
            { 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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


use*_*117 11

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

(format t "~@R~%" (parse-integer (elt *posix-argv* 1)))
(quit)
Run Code Online (Sandbox Code Playgroud)

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

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

Ben*_*ter 6

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;
    }
Run Code Online (Sandbox Code Playgroud)


Chr*_*ung 5

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

sub r{chr 8543+pop}
Run Code Online (Sandbox Code Playgroud)


Tom*_*ndt 5

语言: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
}
Run Code Online (Sandbox Code Playgroud)

Elus的原帖


Ano*_*nJr 0

非常简单:将查询传递给 Google 并截取答案。下一个。:p

顺便说一句,这不应该是一个社区维基吗?

  • google_roman() { lynx -dump http://google.com/search?q=$1+in+roman \ |awk "/^$1 = /{print \$3}"; }; 谷歌_罗马 4999 (3认同)