""" 0013.1 - Roman to Integer - Solution 1 - Right-to-Left Pass """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def romanToInt(self, s: str) -> int:
"""Roman to Integer Function"""
roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50,
'C': 100, 'D': 500, 'M': 1000}
result = 0
prev = 0
for char in reversed(s):
curr = roman[char]
if curr < prev:
result -= curr
else:
result += curr
prev = curr
return result
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().romanToInt("III")) # 3
print(Solution().romanToInt("LVIII")) # 58
print(Solution().romanToInt("MCMXCIV")) # 1994
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()
""" 0013.2 - Roman to Integer - Solution 2 - Left-to-Right Pass """
#####################################################################################
# Imports
#####################################################################################
#####################################################################################
# Classes
#####################################################################################
class Solution:
"""Solution Class"""
def romanToInt(self, s: str) -> int:
"""Roman to Integer Function"""
roman = {'I': 1, 'V': 5, 'X': 10, 'L': 50,
'C': 100, 'D': 500, 'M': 1000}
result = 0
for i in range(len(s)):
if i + 1 < len(s) and roman[s[i]] < roman[s[i + 1]]:
result -= roman[s[i]]
else:
result += roman[s[i]]
return result
#####################################################################################
# Functions
#####################################################################################
def testcase():
"""Test Function"""
print(Solution().romanToInt("III")) # 3
print(Solution().romanToInt("LVIII")) # 58
print(Solution().romanToInt("MCMXCIV")) # 1994
#####################################################################################
# Main
#####################################################################################
if __name__ == "__main__":
testcase()