from profiler import profile_functions def romanToIntPablo2022(s: str) -> int: roman = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000} roman_sum = 0 for index, letter in enumerate(s): try: if roman[letter] < roman[s[index + 1]]: roman_sum -= roman[letter] else: roman_sum += roman[letter] except IndexError: roman_sum += roman[letter] return roman_sum def romanToIntPablo2023(s: str) -> int: roman = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000} result = 0 prev_value = 0 for i in range(len(s) - 1, -1, -1): curr_value = roman[s[i]] if curr_value < prev_value: result -= curr_value else: result += curr_value prev_value = curr_value return result test_elements = [ "III", "LVIII", "MCMXCIV", "I", "II", "IV", "VI", "IX", "XI", "XIV", "XVI", "XIX", "XXI", "XXIV", "XXVI", "XXIX", "XXXI", "XXXIV", "XXXVI", "XXXIX", "XL", "XLIV", "XLV", "XLVII", "L", "LIV", "LVI", "LIX", "LXI", "LXIV", ] functions = { "Pablo - 2022": romanToIntPablo2022, "Pablo - 2023": romanToIntPablo2023, } profile_functions(functions, test_elements, 500000)