開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- Script言語: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
roman = ""
roman += 'M' * (n / 1000)
n = n % 1000
roman += 'D' * (n / 500)
n = n % 500
roman += 'C' * (n / 100)
n = n % 100
roman += 'L' * (n / 50)
n = n % 50
roman += 'X' * (n / 10)
n = n % 10
roman += 'V' * (n / 5)
roman += 'I' * (n % 5)
roman
end
[4,45,456,4567].each do |n|
puts "#{n}: #{old_roman_numeral n}"
end
入出力結果(Terminal)
#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-
def old_roman_numeral n
roman = ""
roman += 'M' * (n / 1000)
n = n % 1000
roman += 'D' * (n / 500)
n = n % 500
roman += 'C' * (n / 100)
n = n % 100
roman += 'L' * (n / 50)
n = n % 50
roman += 'X' * (n / 10)
n = n % 10
roman += 'V' * (n / 5)
roman += 'I' * (n % 5)
roman
end
[4,45,456,4567].each do |n|
puts "#{n}: #{old_roman_numeral n}"
end
ちなみにJavaScriptの場合。
コード(BBEdit)
String.prototype.repeat = function(n){
var result = "";
for(var i = 0; i < n; i++){
result += this;
}
return result;
};
var old_roman_numeral = function(n){
var roman = 'M'.repeat(Math.floor(n / 1000));
n %= 1000;
roman += 'D'.repeat(Math.floor(n / 500));
n %= 500;
roman += 'C'.repeat(Math.floor(n / 100));
n %= 100;
roman += 'L'.repeat(Math.floor(n / 50));
n %= 50;
roman += 'X'.repeat(Math.floor(n / 10));
n %= 10;
roman += 'V'.repeat(Math.floor(n / 5));
roman += 'I'.repeat( n % 5);
return roman;
};
var n = parseInt($('#number').val(), 10);
$('#pre0').text(old_roman_numeral(n));
$('#number').css('text-align', 'right');
pythonの場合。
sample.py
コード(BBEdit)
#!/usr/bin/env python3.3
# -*- coding: utf-8 -*-
def old_roman_numeral(n):
roman = 'M' * (n // 1000)
n = n % 1000
roman += 'D' * (n // 500)
n = n % 500
roman += 'C' * (n // 100)
n = n % 100
roman += 'L' * (n // 50)
n = n % 50
roman += 'X' * (n // 10)
n = n % 10
roman += 'V' * (n // 5)
roman += 'I' * (n % 5)
return roman
for n in [4,45,456,4567]:
print("{0}: {1}".format(n, old_roman_numeral(n)))
入出力結果(Terminal)
$ ./sample.py 4: IIII 45: XXXXV 456: CCCCLVI 4567: MMMMDLXVII $
perlの場合。
sample.pl
コード(BBEdit)
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
sub old_roman_numeral{
my $n = shift;
my $roman = 'M' x ( $n / 1000 );
$n = $n % 1000;
$roman .= 'D' x ( $n / 500 );
$n = $n % 500;
$roman .= 'C' x ( $n / 100 );
$n = $n % 100;
$roman .= 'L' x ( $n / 50 );
$n = $n % 50;
$roman .= 'X' x ($n / 10);
$n = $n % 10;
$roman .= 'V' x ($n / 5 );
$roman .= 'I' x ($n % 5);
$roman;
}
for(4, 45, 456, 4567){
print $_ . ": " . old_roman_numeral($_) . "\n";
}
入出力結果(Terminal)
$ ./sample.pl 4: IIII 45: XXXXV 456: CCCCLVI 4567: MMMMDLXVII $
0 コメント:
コメントを投稿