Напишіть алгоритм для інтерпретації послідовності літер як римської цифри. (див. правила римських цифр нижче)
Кожна окрема літера має відповідне арабське десяткове значення, не максимум. Але заздалегідь у вас немає ключа, тому {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}
Римські чисельні правила
Лише букви, що представляють потужність десять, можуть повторюватися, максимум три рази поспіль і всього чотири рази, наприклад
II
III
XXXIX
Якщо одна чи кілька літер розміщені після іншої літери більшої цінності, додайте цю суму
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).