2013年10月10日木曜日

開発環境

『初めてのプログラミング 第2版』(Chris Pine 著、長尾 高弘 訳、オライリー・ジャパン、2010年、ISBN978-4-87311-469-9)の 9章(自作メソッドの書き方), 9.5(練習問題)、古典的ローマ数字、を解いてみる。

その他参考書籍

古典的ローマ数字

コード(BBEdit)

sample.rb

#!/usr/bin/env ruby2.0
#-*- coding: utf-8 -*-

def old_roman_numeral num
    num_roman = {1000 => 'M',
                 500 => 'D',
                 100 => 'C',
                 50 => 'L',
                 10 => 'X',
                 5 => 'V',
                 1 => 'I'}
    result = ""
    num_roman.each do |n, c|
        result += c * (num / n)
        num %= n
    end
    result
end

puts old_roman_numeral 4
puts old_roman_numeral 9
(100..120).each do |n|
    puts "#{n}: #{old_roman_numeral n}"
end

入出力結果(Terminal)

$ ./sample.rb
IIII
VIIII
100: C
101: CI
102: CII
103: CIII
104: CIIII
105: CV
106: CVI
107: CVII
108: CVIII
109: CVIIII
110: CX
111: CXI
112: CXII
113: CXIII
114: CXIIII
115: CXV
116: CXVI
117: CXVII
118: CXVIII
119: CXVIIII
120: CXX
$

ちなみにpython3.3の場合。

コード(BBEdit)

sample.py

#!/usr/bin/env python3.3
#-*- coding: utf-8 -*-

def oldRomanNumeral(num):
    num_roman = {
        1000:'M',
        500:'D',
        100:'C',
        50:'L',
        10:'X',
        5:'V',
        1:'I'
    }
    result = ""
    for n in sorted(num_roman.keys(), reverse=True):
        result += num_roman[n] * (num // n)
        num %= n
    return result

print(oldRomanNumeral(4))
print(oldRomanNumeral(9))
for n in range(100, 121):
    print('{0}: {1}'.format(n, oldRomanNumeral(n)))

入出力結果(Terminal)

$ ./sample.py
IIII
VIIII
100: C
101: CI
102: CII
103: CIII
104: CIIII
105: CV
106: CVI
107: CVII
108: CVIII
109: CVIIII
110: CX
111: CXI
112: CXII
113: CXIII
114: CXIIII
115: CXV
116: CXVI
117: CXVII
118: CXVIII
119: CXVIIII
120: CXX
$

0 コメント:

コメントを投稿