- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 
                        class RomeNumberConvertor(object):
    def __init__(self):
        self.discharge = ['unit', 'dozen', 'hundred', 'thousand']
        self.unit_set = ('I', 'V', 'X')
        self.dozen_set = ('X', 'L', 'C')
        self.hundred_set = ('C', 'D', 'M')
        self.thousand_set = ('M')
        
    def _discharge2rome(self, discharge, value):
        pattern = {'1': '{0}', '2': '{0}{0}', '3': '{0}{0}{0}',
                        '4': '{0}{1}', '5': '{1}', '6': '{1}{0}',
                        '7': '{1}{0}{0}', '8': '{1}{0}{0}{0}', '9': '{0}{2}'}
        return pattern[value].format(*getattr(self, '%s_set' % discharge))
        
    def lat2rome(self, num):
        rome_digit = ''
        for i, k in enumerate(reversed(str(num))):
            if k == '0': continue
            rome_digit = '%s%s' % (self._discharge2rome(self.discharge[i], k), rome_digit) 
        return rome_digit