Advertisement
Mussab_Blue

Number to Roman Numerals & Reverse

Aug 24th, 2022
1,076
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.77 KB | None | 0 0
  1. values ={'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
  2. dvs = sorted(values.items(), key=lambda x:x[1], reverse=True)
  3.  
  4. def converter(num):
  5.     def roman2int(s):
  6.         num  = 0
  7.         while s:
  8.             n, m = f'{s}0'[:2]
  9.             n, m = values[n], values.get(m, 0)
  10.             num += max(m-n, n)
  11.             s = s[1+(m>n):]
  12.         return num
  13.  
  14.     def int2roman(num):
  15.         if num < 0: return None
  16.         if num ==0: return ''
  17.  
  18.         for k, v in dvs:
  19.             for k2, v2 in dvs:
  20.                 rem = v - v2
  21.                 if (v2 < num < v) and (num >= rem) and (rem != v2):
  22.                     v = rem
  23.                     k = k2 + k
  24.                     break
  25.             if (roman:=int2roman(num-v)) != None:
  26.                 return k + roman
  27.         return None
  28.  
  29.     roman =  int2roman(num)
  30.     number = roman2int(roman)
  31.     print(f'Original: {num} => Roman: {roman} => Number: {number}')
  32.  
  33.  
  34. converter(1912)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement