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 -ple's!.!($#.=5x$&*8%29628)=~y$IVCXL4620-8$XLMCDIXV$d!eg;last}{'
3484
MMMCDLXXXIV
Run Code Online (Sandbox Code Playgroud)
致谢:原来由于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的数字.
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)
语言: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的原帖
非常简单:将查询传递给 Google 并截取答案。下一个。:p
顺便说一句,这不应该是一个社区维基吗?