#10: "Zahlenübersetzer"
Typ: Kürze des Codes
Deadline: 23.11.2008
Abgabe: contest@spieleprogrammierer.de
Bitte beachten:
- Ablauf und Regeln
Aufgabenstellung:
Am 19. Oktober im Jahr 50 v. Chr. nahm der römische Centurio Ghalerius Maximus wie jeden Abend ein Bad in seiner Therme. Da der Tag sehr anstrengend gewesen war, schlief er dabei ein. Über Nacht fror die Therme zu, und der Centurio verschlief im eingefrorenen Zustand mehr als 2000 Jahre. Nun wurde er von Archäologen ausgegraben. Wie durch ein Wunder hat er die lange Zeit gut überstanden.
Doch er hat nun ein Problem: Er kennt unser heutiges Zahlensystem nicht. Er braucht einen Übersetzer, der seine römischen Zahlen so umwandelt, dass er weiß, wie sie ausgesprochen werden. Schreibe für ihn diesen Übersetzer!
Wenn der Centurio beispielsweise "XIV" eingibt, dann muss "vierzehn" herauskommen. Die Zahlen gehen von 1 (I) bis 3999 (MMMCMXCIX).
Die Funktion, die geschrieben werden soll, sieht wie folgt aus:
|
C-/C++-Quelltext
|
1
|
void translate_number(const char* p_roman_in, char* p_text_out);
|
p_roman_in enthält die römische Zahl, z.B. "XXIX". Die Funktion muss nun den Zahlennamen dieser Zahl nach p_text_out schreiben, z.B. "neunundzwanzig". Der String muss, wie das so üblich ist, mit einer Null abgeschlossen werden. Die Eingaben sind immer gültig. Es muss also nicht geprüft werden, ob die Zahl eine gültige römische Zahl ist.
Eine Referenzimplementierung ist gegeben, sowie einige Testfälle. Dort könnt Ihr sehen, wie die Zahlen genau ausgegeben werden sollen.
Die Kürze des Codes zählt, also die Anzahl der Token. Ein Token-Counter befindet sich im Paket (Link unten).
Bedingungen:
- Verwenden der Standardbibliothek ist verboten.
- Zahlennamen und römische Zahlen dürfen nicht in übermäßiger Zahl in Strings vorgespeichert werden. Es dürfen maximal 150 römische Zahlen und Zahlennamen insgesamt in Strings gespeichert werden. Unter "speichern" fällt jegliche Art der Speicherung, ob nun direkt lesbar oder irgendwie anders kodiert.
- Die vorgespeicherten Daten dürfen 8 KB nicht überschreiten.
Paket hier herunterladen
Das Paket besteht aus dem Quelltext der Testumgebung (inklusive Referenzimplementierung), Code::Blocks-Projekt, Visual Studio-Projekt und Token-Counter.
Ein paar Links:
-
Römische Zahlen
-
Zahlennamen
Viel Spaß und viel Erfolg!