Напишите алгоритм для интерпретации последовательности букв как римской цифры. (см. правила римских цифр ниже)
Каждая отдельная буква имеет соответствующее арабское десятичное значение, но не максимальное. Но у вас нет ключа заранее, поэтому это {A=10, I=1, X=5, ... Z=1000000}зависит от вашей интерпретации.
Вызов
- Прочитать ввод через
STDINили эквивалентный и записать вывод черезSTDOUTили эквивалентный - Допустимые значения - это комбинации прописных и строчных букв, т.е.
\[a-zA-Z]+\ - Ввод должен быть проверен, чтобы увидеть, может ли буквенная последовательность интерпретироваться как действительная римская цифра
- Если входные данные проходят проверку, допустимым выходным значением должна быть самая низкая арабская десятичная интерпретация, а используемый ключ, т.
AaЕ. Интерпретируется как4 {a=5, A=1}нет6 {A=5, a=1}или9 {a=10, a=1}
Римские числовые правила
Только буквы, представляющие степени десяти, могут повторяться, максимум три раза подряд и всего четыре раза, например
IIIIIXXXIXЕсли одна или несколько букв ставятся после другой буквы большего значения, добавьте эту сумму
AAaa => 22 {A=10, a=1} (20 + 2 = 22) bbAAaa => 222 {b=100, A=10, a=1} (200 + 20 + 2 = 222)Если буква помещена перед другой буквой большей стоимости, вычтите эту сумму
Aa => 4 {a=5, A=1} (5 – 1 = 4) AaA => 19 {A=10, a=1} (10 + 10 – 1 = 19) BbBaA => 194 {B=100, b=10, A=5, a=1} (100 + 100 - 10 + 5 - 1 = 194)Несколько правил применяются для вычитания сумм из римских цифр:
- Вычтите только десять степеней, т.е.
1, 10, 100...не5, 50, 500... - Поэтому двойное вычитание
18не записывается какXVIIIнеIIXX (10 + 10 - 1 - 1) - Не вычитайте число из числа, которое больше чем в десять раз.
Вы можете вычесть1из5или,10но не из50, 100, 500...
- Вычтите только десять степеней, т.е.
пример
Input:
Aa
BAa
CCCXLVII
MMMCDVII
ABADDF
XVVX
FAASGSH
DXCCDA
AaBbcDEf
Output:
4 {a=5, A=1}
14 {B=10, a=5, A=1}
347 {C=100, L=50, X=10, V=5, I=1}
347 {M=100, D=50, C=10, V=5, I=1}
1921 {A=1000, B=100, D=10, F=1}
'XVVX' failed Roman numeral test
7191 {F=5000, A=1000, S=100, G=10, H=1}
'DXCCDA' failed Roman numeral test
4444 {a=5000, A=1000, b=500, B=100, D=50, c=10, f=5, E=1}
Aaимеет значение 1 (A = 1, a = 2).