Rubyで数字をローマ数字で表示してください。
参考:http://ja.wikipedia.org/wiki/%E3%83%AD%E3%83%BC%E3%83%9E%E6%95%B0%E5%AD%97
例:
1 => I
4 => IV
15 => XV
◎この質問は、プログラムの書き方がわからないのではなく「こんな書き方もできる」の募集です。
◎面白いプログラム、とても短いプログラム、トリッキーなもや勉強になるものは喜ばしいです。
◎Rubyがダメな人はRuby以外でも可
出来栄えにあまり自信はないけど JavaScript で。
フォントの都合上 3999 までにしました。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> <script type="text/javascript"> function a2r() { rnumerals1 = ['I', 'X', 'C', 'M'] ; rnumerals5 = ['V', 'L', 'D'] d = document.exForm.digits.value ; if (isNaN(d) || d <= 0 || d > 3999 || d.indexOf('.') > 0) { document.getElementById('result').innerHTML = 'アラビア数字で 1~3999 までの自然数を入力してください。' ; return ; } romanNum = '' ; for (n = 0; n < d.length; ++n) { an = d.charAt(n) ; if (an == 4 || an == 9) { romanNum += rnumerals1[d.length - n - 1] + ((an == 4) ? rnumerals5[d.length - n - 1] : rnumerals1[d.length - n]) ; } else { if (an >= 5) { romanNum += rnumerals5[d.length - n - 1] ; an -= 5 ; } for (m = 0; m < an; ++m) { romanNum += rnumerals1[d.length - n - 1] ; } } } document.getElementById('result').innerHTML = romanNum ; } </script> </head> <body> <form name="exForm"> <div> <div id="result"> </div> <input type="text" name="digits" /><input type="submit" onclick="a2r(); return false;" value="変換" /> </div> </form> </body> </html>
試しました。正しく出ているようです。
これでできるんですねぇ。
まだ自分で書いてないんで(汗)すけど、もっと長くなるかと思っていたので驚きました。
ありがとうございます。
引き続き、別のやり方やもっと短くなるものなど募集〜
Ruby は分からないので PHP で。
最初に全体をIXCMに変換してから 4、5、9 を変換。
<?php $d = $_POST['digits'] ; if (!ctype_digit($d) || $d < 1 || $d > 3999) $result = 'アラビア数字で 1~3999 までの自然数を入力してください。' ; else { $rnumerals1 = array('I', 'X', 'C', 'M') ; $rnumerals5 = array('V', 'L', 'D') ; $l = strlen($d)-1 ; $result = preg_replace('/(\d)/e', 'str_repeat($rnumerals1[$l--], $1)', $d) ; $result = preg_replace('/((\w)(\2{8}|\2{4}|\2{3}))/e', '(strlen("$1") != 5 ? "$2" : "").(strlen("$1") == 9 ? $rnumerals1[array_search("$2", $rnumerals1)+1] : $rnumerals5[array_search("$2", $rnumerals1)])', $result) ; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html> <head> </head> <body> <form action="./<?php echo basename(__FILE__) ?>" method="post"> <div> <div><?php echo $result ; ?></div> <input type="text" name="digits" value="" /><input type="submit" value="変換" /> </div> </form> </bdoy> </html>
ありがとうございます。
こちらのほうがすっきりしてる気がしますね。
回答ありがとうございます。
意図が伝わりにくい出題ですみませんが(汗
プログラムそのもので回答(いろいろな解案)を希望しています。
引き続き、よろしくお願いいたします。