開発環境
『初めてのプログラミング 第2版』 (Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の
12章(章全部で復習), 12.5(練習問題の続き)roman_to_integer 'mcmxcix'! を解いてみる。
その他参考書籍
roman_to_integer 'mcmxcix'!
コード(BBEdit )
sample.rb
#!/usr/bin/env ruby1.9
#-*- coding: utf-8 -*-
def roman_to_integer roman
result = 0
pre = 0
r_n = {
'M' => 1000,
'D' => 500,
'C' => 100,
'L' => 50,
'X' => 10,
'V' => 5,
'I' => 1}
(roman.length - 1).downto(0) do |i|
n = r_n[roman[i].upcase]
return "有効なローマ数字になってない!" unless n
if n >= pre
result += n
pre = n
else
result -= n
end
end
result
end
puts roman_to_integer 'ruby'
puts roman_to_integer 'mcmxcix'
入出力結果(Terminal)
$ ./sample.rb
有効なローマ数字になってない!
1999
$
ちなみにJavaScriptの場合。
ローマ数字:
数値:
コード(BBEdit )
HTML
<label>ローマ数字: <input id="roman_num" type="text" value="mcmxcix" onkeyup="try{
var text = $('#pre1').text();
eval( text );
} catch (e) {
alert(e);
}"/>
<p>数値: <span id="roman_to_num"></span></p>
JavaScript
(function( ) {
var result = 0,
roman = $('#roman_num').val(),
pre = 0,
r_n = {'m':1000, 'd':500,'c':100,'l':50,'x':10,'v':5,'i':1},
i, n;
if( roman.length === 0 ) {
result = "";
}
for (i = roman.length - 1; i >= 0; i -= 1) {
n = r_n[(roman[i]).toLowerCase()];
if (n === undefined ) {
$('#roman_to_num').text("有効なローマ数字になっていない!");
return;
}
if ( n >= pre ) {
result += n;
pre = n;
} else {
result -= n;
}
}
$('#roman_to_num').text(result);
})();
pythonの場合。
sample.py
コード(BBEdit )
#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-
def romanTointeger(roman):
result = 0
pre = 0
r_n = {
'M' : 1000,
'D' : 500,
'C' : 100,
'L' : 50,
'X' : 10,
'V' : 5,
'I' : 1}
for i in range(len(roman) - 1, -1, -1):
if roman[i].upper() in r_n:
n = r_n[roman[i].upper()]
if n >= pre:
result += n
pre = n
else:
result -= n
else:
return "有効なローマ数字になっていない!"
return result
print( romanTointeger('python') )
print( romanTointeger('mcmxcix') )
入出力結果(Terminal)
$ ./sample.py
有効なローマ数字になっていない!
1999
$
perlの場合。
sample.pl
コード(BBEdit )
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";
sub roman_to_integer {
my $roman = shift;
my $result = 0;
my $pre = 0;
my %r_n = (
'M' => 1000,
'D' => 500,
'C' => 100,
'L' => 50,
'X' => 10,
'V' => 5,
'I' => 1);
for (reverse split "", $roman) {
my $n = $r_n{uc $_};
return "有効なローマ数字になっていない!" unless $n;
if ($n >= $pre) {
$result += $n;
$pre = $n;
} else {
$result -= $n;
}
}
$result;
}
say roman_to_integer 'perl';
say roman_to_integer 'mcmxcix';
入出力結果(Terminal)
$ ./sample.pl
有効なローマ数字になっていない!
1999
$
0 コメント:
コメントを投稿