Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

1

19.10.2008, 13:36

#10: "Zahlenübersetzer", K.d.C., 23.11.2008

#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!

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

20.10.2008, 06:41

Ich hoffe diesmal wieder auf eine höhere Teilnehmerzahl!
Das Risiko, eine falsche Lösung einzureichen, lässt sich bei diesem Contest sehr gut minimieren, da es nur 3999 verschiedene Eingaben gibt. Wer die alle testet, ist auf der sicheren Seite. :)

3

20.10.2008, 14:00

Hmmm ist es richtig, dass bei der Referenzlösung für LX sechszig und für LXX siebenzig rauskommt? :P
Mein Projekt: Rise of the Sylvan

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

20.10.2008, 14:03

Oh. Natürlich nicht! :roll:
Werde ich korrigieren. Danke!

Edit: Erledigt. Hoffentlich stimmt es jetzt.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

20.10.2008, 18:15

Die Bedingungen sind jetzt etwas deutlicher formuliert.

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.
- Die vorgespeicherten Daten dürfen 8 KB nicht überschreiten.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

20.10.2008, 18:28

Zitat von »"David Scherfgen"«

142 Zahlennamen in Strings gespeichert werden.


Hu, braucht man echt so viele? :)
@D13_Dreinig

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

20.10.2008, 18:28

Ich brauche weniger, aber ich möchte die genaue Zahl nicht verraten ;)

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

8

20.10.2008, 19:03

Hört sich interessant an und endlich auch mal verständlich xD ... ich denke ich werde diesmal auch wieder mitmachen bzw mitmachen letzdes mal hab ich ja nicht abgegeben :/

Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

9

20.10.2008, 19:13

Irgendwie läuft der Tokencounter bei mir nicht....

"Die Anwedung konnte nicht gestartet werden, weil die Anwendungskonfiguration nicht korrekt ist. [...]"

Über eingabeaufforderung geht's auch nicht.

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

10

20.10.2008, 19:31

Zitat von »"Powerpaule"«

Irgendwie läuft der Tokencounter bei mir nicht....

Du hast wohl kein Visual Studio installiert.
Probier's jetzt nochmal, ich habe die Runtime nun statisch gelinkt.

Werbeanzeige