2014年3月19日水曜日

CodeIQ|ITエンジニアのための実務スキル評価サービスで挑戦した問題、@nkawagashira 川頭 信之さんからの言語不問の問題、

挑戦者求む!【Python】ローマ数字変換器を作ってみよう by @nkawagashira 川頭 信之│CodeIQ
の解答、解説の記事、10「ローマ数字変換器を作ってみよう」の問題と解説 - スピード冒険野郎の操縦席
問題文
ローマ数字変換器を作ってみよう!
ローマ数字をアラビア(通常の)数字に変換するプログラムをPythonで作ってみましょう。
が出てたので、挑戦した時に提出した、解答コード。

コード(BBEdit, Emacs)

sample.py

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

def main(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]
        if not c in r_n:
            raise Exception('有効なローマ数字になっていない!: {}'.format(c))
        n = r_n[c]
        if n >= pre:
            num += n
            pre = n
        else:
            num -= n
    return num

if __name__ == '__main__':
    for roman in ['XLIX', 'MDCCCLXXXVIII', 'MCMXLV', 'MMMCMXCIX']:
        print(main(roman))

入出力結果(Terminal)

$ ./sample.py
49
1888
1945
3999
$

classを使っていること等を除けば、考え方は出題者の川頭 信之さんの考え方と似たような感じだった。ということで、半分くらいの人の方法も参考になってよかった!

0 コメント:

コメントを投稿