Напишите алгоритм для интерпретации последовательности букв как римской цифры. (см. правила римских цифр ниже)
Каждая отдельная буква имеет соответствующее арабское десятичное значение, но не максимальное. Но у вас нет ключа заранее, поэтому это {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}
code-golf
cryptography
roman-numerals
iamogbz
источник
источник
Aa
имеет значение 1 (A = 1, a = 2).Ответы:
Python 2,
415444440419416 байтВ конце концов, римских цифр не так много. Этот скрипт создает их все и проверяет все перестановки ввода, а затем возвращает наименьшее совпадение.
источник
import itertools as i
а затемi.permutations
короче?