Römische Ziffern

Ziel ist es, einen Konverter für römische Zahlen zu schreiben. Der Konverter soll römische Zahlen in arabische Zahlen und umgekehrt umwandeln.

Das Skript soll wie ein normaler Unix-Filter funktionieren. Es soll eine Datei einlesen, deren Name als Kommandozeilenparameter angegeben ist, oder Eingaben von STDIN akzeptieren. Die Ausgabe erfolgt auf STDOUT. Jede Zeile der Datei enthält eine Zahl von 1 bis 3999, entweder mit römischen oder arabischen Ziffern. Die Ausgabe enthält für jede Zeile die gleiche Zahl im jeweils anderen Format.

Beispiel: Für diese Eingabe:

III
29
38
CCXCI
1999
2012

ist die korrekte Ausgabe:

3
XXIX
XXXVIII
291
MCMXCIX
MMXII

Hier zur Erinnerung die römischen Ziffern:

I = 1
V = 5
X = 10
L = 50
C = 100
D = 500
M = 1000

Diese Buchstaben werden kombiniert und deren Wert zusammengezählt. Die Buchstaben werden vom höchsten bis zum niedrigsten Wert aufgelistet:

II = 2 (1 + 1)
VIII = 8 (5 + 1 + 1 + 1)
XXXI = 31 (10 + 10 + 10 + 1)

Es dürfen aber maximal 3 gleiche Buchstaben hintereinander vorkommen. Um Zahlen wie 4 oder 900 darzustellen, darf ein einzelne Buchstabe mit einem niedrigeren Wert vor einem Buchstaben mit einem höheren Wert vorkommen, um so eine Subtraktion auszudrücken:

IV = 4 (5 - 1)
IX = 9 (10 - 1)
XC = 90 (100 - 10)
CD = 400 (500 - 100)
XLII = 42 (50 - 10 + 1 + 1)

Diese Regel wird nur angewendet, um die normalerweise nicht erreichbaren Zahlen auszudrücken.

XV = 15 (nicht XVX)

Lösungen

Verlinke hier deine Lösungen, idealerweise als Deeplink zum Unterverzeichnis, wenn du ein Quiz-Repo hast:

PyUGAT: PythonQuiz/2012-03 (last edited 2023-02-10 10:08:36 by thp)