Текстовый файл состоит из заглавных букв латинского алфавита - цифр римской системы счисления \(I, \, V, \, X, \, L, \, C, \, D, \, M.\)
Определите в прилагаемом файле максимальное количество идущих подряд символов, которые представляют собой корректную римскую запись десятичного числа. Если найдено несколько таких последовательностей, выберите ту которая обозначает наименьшее десятичное число. В ответе укажите десятичное число, соответствующее найденной последовательности римских цифр.
Для выполнения этого задания следует написать программу.
Примечание.
В римской системе счисления приняты следующие правила:
Например, римская запись \(MMXXVI\) корректна обозначает число \(2026,\) а запись \(MDDIVXXX\) некорректна.
Решение:
Python
from re import finditer
def conv(rome):
rd = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1}
ans = 0
for a, b in zip(rome, rome[1:]):
ans += -rd[a] if rd[a] < rd[b] else rd[a]
ans += rd[rome[-1]]
return ans
s = open('24.txt').readline().strip()
ml = 0
nums = set()
for g in finditer(r'(?=(M{,3}(?:CM|CD|D?C{,3})(?:XC|XL|L?X{,3})(?:IX|IV|V?I{,3})))', s):
tmp = g.group(1)
lt = len(tmp)
if lt > ml:
ml = lt
nums = {tmp}
elif lt == ml:
nums.add(tmp)
res = {conv(r) for r in nums}
print(min(res))
Ответ: \(2388\)
Эффективно готовьтесь к ЕГЭ по информатике с новым тренажёром, эмулирующем работу станции КЕГЭ, которая используется на реальном экзамене