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