Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Uncategorized category for Roman Numerals by zgub4
numerals = [
{'letter': 'M', 'value': 1000},
{'letter': 'D', 'value': 500},
{'letter': 'C', 'value': 100},
{'letter': 'L', 'value': 50},
{'letter': 'X', 'value': 10},
{'letter': 'V', 'value': 5},
{'letter': 'I', 'value': 1},
]
def checkio(data):
remainder = data
result = ''
for numeral_index in range(0, len(numerals)):
numeral = numerals[numeral_index]
next_numeral = numerals[numeral_index + 1] if numeral_index + 1 < len(numerals) else None
factor = remainder // numeral['value']
if factor > 0:
if factor < 4:
if next_numeral:
if 2 * numeral['value'] == numerals[numeral_index - 1]['value']:
a = 2 * numeral['value'] - next_numeral['value']
if a <= remainder:
result += next_numeral['letter'] + numerals[numeral_index - 1]['letter']
remainder = (remainder - numerals[numeral_index - 1]['value']) + next_numeral['value']
else:
result = result + (numeral['letter'] * int(factor))
remainder -= (factor * numeral['value'])
continue
result = result + (numeral['letter'] * int(factor))
remainder -= (factor * numeral['value'])
else:
result += numeral['letter'] + numerals[numeral_index - 1]['letter']
remainder = (remainder - numerals[numeral_index - 1]['value']) + numeral['value']
return result
if __name__ == '__main__':
assert checkio(6) == 'VI', '6'
assert checkio(76) == 'LXXVI', '76'
assert checkio(499) == 'CDXCIX', '499'
assert checkio(3888) == 'MMMDCCCLXXXVIII', '3888'
Oct. 21, 2017