assertNull
BAN USERdef convertToRoman(integer):
digits, romans = [1000,500,100,50,10,5,1], ['M','D','C','L','X','V','I']
result = ''
for i, digit in enumerate(digits):
repeat, integer= divmod(integer, digit)
if repeat == 4:
if result and result[-1] == romans[i-1]:
result = result[:-1] + romans[i] + romans[i-2]
else: result += romans[i] + romans[i-1]
else: result += repeat*romans[i]
return result
def convertToInteger(roman):
dic = {'I':1, 'V':5, 'X': 10, 'L': 50, 'C':100, 'D': 500, 'M': 1000}
result = dic[roman[-1]]
digit = dic[roman[0]]
for i in range(1,len(roman)):
next = dic[roman[i]]
result += -digit if digit < next else digit
digit = next
return result
@prudent_programmer, Good, short and clean solution.
2 improvements can be done on top of this:
1. don't iterate 1 to n, iterate thru 1 to sqrt(n) and add both i and n//i
2. if an odd number go 2 by 2 instead of 1 by 1
- assertNull April 12, 2018