Schreiben Sie einen Algorithmus, um eine Folge von Buchstaben als römische Zahl zu interpretieren. (siehe Regeln für römische Ziffern weiter unten)
Jeder einzelne Buchstabe hat einen passenden arabischen Dezimalwert, kein Maximum. Aber Sie haben den Schlüssel nicht im Voraus, also {A=10, I=1, X=5, ... Z=1000000}entscheidet Ihre Interpretation.
Herausforderung
- Eingabe über
STDINoder gleichwertig lesen und Ausgabe überSTDOUToder gleichwertig schreiben - Gültige Eingaben sind Kombinationen aus Groß- und Kleinbuchstaben, dh Übereinstimmungen
\[a-zA-Z]+\ - Die Eingabe sollte überprüft werden, um festzustellen, ob die Buchstabenfolge als gültige römische Zahl interpretiert werden kann
- Wenn die Eingabe die Validierung besteht, sollte die gültige Ausgabe die niedrigste arabische Dezimalinterpretation sein und der verwendete Schlüssel wird
Aaals4 {a=5, A=1}nicht oder interpretiert6 {A=5, a=1}9 {a=10, a=1}
Regeln für römische Ziffern
Es können nur Buchstaben mit Zehnerpotenzen wiederholt werden, maximal dreimal hintereinander und insgesamt viermal, z
IIIIIXXXIXWenn ein oder mehrere Buchstaben nach einem anderen Buchstaben von größerem Wert platziert werden, addieren Sie diesen Betrag
AAaa => 22 {A=10, a=1} (20 + 2 = 22) bbAAaa => 222 {b=100, A=10, a=1} (200 + 20 + 2 = 222)Wenn ein Buchstabe vor einem anderen Buchstaben von größerem Wert steht, subtrahieren Sie diesen Betrag
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)Für das Abziehen von Beträgen von römischen Ziffern gelten mehrere Regeln:
- Subtrahieren Sie nur Zehnerpotenzen, dh
1, 10, 100...nicht5, 50, 500... - Daher
18wird keine doppelte Subtraktion alsXVIIInicht geschriebenIIXX (10 + 10 - 1 - 1) - Subtrahieren Sie keine Zahl von einer, die mehr als zehnmal größer ist.
Sie können subtrahieren1aus5oder10aber nicht aus50, 100, 500...
- Subtrahieren Sie nur Zehnerpotenzen, dh
Beispiel
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}
Aahat einen Wert von 1 (A = 1, a = 2).