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
STDIN
oder gleichwertig lesen und Ausgabe überSTDOUT
oder 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
Aa
als4 {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
II
III
XXXIX
Wenn 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
18
wird keine doppelte Subtraktion alsXVIII
nicht geschriebenIIXX (10 + 10 - 1 - 1)
- Subtrahieren Sie keine Zahl von einer, die mehr als zehnmal größer ist.
Sie können subtrahieren1
aus5
oder10
aber 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}
Aa
hat einen Wert von 1 (A = 1, a = 2).