開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- Ruby (プログラミング言語)
『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 12章(新しいクラスのオブジェクト), 12.6(練習問題の続き)、roman_to_integer 'mcmxcix'!、を解いてみる。
その他参考書籍
- 『プログラミング言語 Ruby』David Flanagan, まつもと ゆきひろ 著 、卜部 昌平 監訳、長尾 高弘 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-394-4)
- Rubyクックブック ―エキスパートのための応用レシピ集
roman_to_integer 'mcmxcix'!
コード(BBEdit)
sample.rb
#!/usr/bin/env ruby2.0
#-*- coding: utf-8 -*-
def roman_to_integer roman
num = 0
r_n = {
'M' => 1000,
'D' => 500,
'C' => 100,
'L' => 50,
'X' => 10,
'V' => 5,
'I' => 1}
pre = 0
(roman.length - 1).downto(0) do |i|
c = roman[i]
c = c.upcase
n = r_n[c]
return '有効なローマ数字になっていない!' unless n
if n >= pre
num += n
pre = n
else
num -= n
end
end
num
end
r1 = 'abcde'
r2 = 'mcmxcix'
[r1, r2].each do |roman|
puts "#{roman}: #{roman_to_integer roman}"
end
入出力結果(Terminal)
$ ./sample.rb abcde: 有効なローマ数字になっていない! mcmxcix: 1999 $
ちなみにpython3.4の場合。
コード(BBEdit)
sample.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def romanToInteger(roman):
num = 0
r_n = {
'm': 1000,
'd': 500,
'c': 100,
'l': 50,
'x': 10,
'v': 5,
'i': 1
}
pre = 0
for i in range(len(roman) - 1, -1, -1):
c = roman[i]
c = c.lower()
if not c in r_n:
return '有効なローマ数字になっていない!'
n = r_n[c]
if n >= pre:
num += n
pre = n
else:
num -= n
return num
for roman in ['abcde', 'mcmxcix']:
print('{0}: {1}'.format(roman, romanToInteger(roman)))
入出力結果(Terminal)
$ ./sample.py abcde: 有効なローマ数字になっていない! mcmxcix: 1999 $
0 コメント:
コメントを投稿