Römische Ziffern
Abgabetermin und Präsentationen: Treffen/2012-03
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:
aschlapsi: https://bitbucket.org/aschlapsi/pythonquiz/src/default/2012-03
brot: https://bitbucket.org/brot/pyug_pythonquiz/src/default/201203-roemische_ziffern
hop: https://bitbucket.org/hopthrisC/pythonquiz/src/default/2012-03
ranger: https://github.com/rangermeier/pythonquiz/tree/master/2012-03-romans