開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- プログラミング言語: Ruby
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 9章(自作メソッドの書き方), 9.5(練習問題)古典的ローマ数字 を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
古典的ローマ数字
コード(BBEdit)
sample.rb
#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-
def old_roman_numeral n
result = 'M' * (n / 1000)
n = n % 1000
result += 'D' * (n / 500)
n = n % 500
result += 'C' * (n / 100)
n = n % 100
result += 'L' * (n / 50)
n = n % 50
result += 'X' * (n / 10)
n = n % 10
result += 'V' * (n / 5)
n = n % 5
result += 'I' * n
result
end
puts old_roman_numeral 4
puts old_roman_numeral 1234
入出力結果(Terminal)
$ ./sample.rb IIII MCCXXXIIII $
ちなみにJavaScriptの場合。
コード(BBEdit)
var n = parseInt($('#t0').val(), 10),
oldRomanNumeral = function( n ) {
var result = new Array( Math.floor(n / 1000) + 1).join('M');
n %= 1000;
result += new Array( Math.floor(n / 500) + 1).join('D');
n %= 500;
result += new Array( Math.floor(n / 100) + 1).join('C');
n %= 100;
result += new Array( Math.floor(n / 50) + 1).join('L');
n %= 50;
result += new Array( Math.floor( n / 10 ) + 1 ).join('X');
n %= 10;
result += new Array( Math.floor(n / 5 ) + 1).join('V');
n %= 5;
result += new Array( n + 1 ).join('I');
return result;
};
$('#pre0').text(oldRomanNumeral(n));
pythonの場合。
sample.py
コード(BBEdit)
#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-
def oldRomanNumeral( n ):
result = 'M' * (n // 1000)
n = n % 1000
result += 'D' * (n // 500)
n = n % 500
result += 'C' * (n // 100)
n = n % 100
result += 'L' * (n // 50)
n = n % 50
result += 'X' * (n // 10)
n = n % 10
result += 'V' * (n // 5)
n = n % 5
result += 'I' * n
return result
for x in [4, 1234]:
print(oldRomanNumeral(x))
入出力結果(Terminal)
$ ./sample.py IIII MCCXXXIIII $
perlの場合。
sample.pl
コード(BBEdit)
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
use POSIX;
sub oldRomanNumeral {
my $n = shift;
my $result = 'M' x floor($n / 1000);
$n = $n % 1000;
$result .= 'D' x floor($n / 500);
$n = $n % 500;
$result .= 'C' x floor($n / 100);
$n = $n % 100;
$result .= 'L' x floor($n / 50);
$n = $n % 50;
$result .= 'X' x floor($n / 10);
$n = $n % 10;
$result .= 'V' x floor($n / 5);
$n = $n % 5;
$result .= 'I' x $n;
$result;
}
for ((4,1234)) {
printf "%s\n", oldRomanNumeral $_;
}
入出力結果(Terminal)
$ ./sample.pl IIII MCCXXXIIII $
0 コメント:
コメントを投稿