New paste Repaste Download
def is_valid_roman(s):
    values = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1}
    prev_value = float('inf')
    
    # Проверка повторений
    repeats = {'M': 0, 'D': 0, 'C': 0, 'L': 0, 'X': 0, 'V': 0, 'I': 0}
    for c in s:
        repeats[c] += 1
        if repeats[c] > 3:  # Более 3 повторений любого символа
            return False
        if c in 'DLV' and repeats[c] > 1:  # D, L, V не могут повторяться
            return False
    
    # Проверка порядка и допустимых вычитаний
    for i in range(len(s)):
        curr_value = values[s[i]]
        if i > 0:
            prev_char = s[i-1]
            if values[prev_char] < curr_value:
                # Проверка допустимых вычитаний
                if prev_char + s[i] not in ['IV', 'IX', 'XL', 'XC', 'CD', 'CM']:
                    return False
        prev_value = curr_value
    return True
def roman_to_decimal(s):
    values = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1}
    total = 0
    prev_value = 0
    
    for c in reversed(s):
        curr_value = values[c]
        if curr_value >= prev_value:
            total += curr_value
        else:
            total -= curr_value
        prev_value = curr_value
    return total
def find_valid_roman(s):
    from itertools import permutations
    chars = list(s)
    max_valid = 0
    
    for perm in permutations(chars):
        roman = ''.join(perm)
        if is_valid_roman(roman):
            value = roman_to_decimal(roman)
            max_valid = max(max_valid, value)
    
    return max_valid
# Пример использования
input_string = "MDCLXVI"
result = find_valid_roman(input_string)
print(result)
Filename: None. Size: 2kb. View raw, , hex, or download this file.

This paste expires on 2024-11-28 06:53:27.056371. Pasted through web.