開発環境
- 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 コメント:
コメントを投稿