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

61

24.10.2008, 16:18

Zitat von »"Exterminans"«

Mit <250 token hast du aber vermutlich bislang nicht an ein paar der seltsameren Zahlen gedacht, will meinen 11 und 12 sowie die Sonderregel das bei 13-19 noch kein "und" im Zahlennamen enthalten ist.
Das parsen der römischen Ziffer ist ja zugegebenermaßen nicht so wirklich schwer, allerdings hat die deutsche Schreibweiße der Zahlen so einige Fallen.

Diese 'Fallen' kann man durch einen einfachen Trick umgehen, wodurch man ein paar hundert Token einspart :)

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

62

24.10.2008, 16:32

Ja, und ich möchte anmerken, dass sich meine eingangs gestellte Frage vor einigen Tagen beantwortet hat :D

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

63

24.10.2008, 21:22

Aber ich hab's doch niemandem verraten ?!

Ich gehe mit 8)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

64

25.10.2008, 20:40

So, ich bin jetzt endlich auch unter 100 und soo stolz drauf :) 8)

@S.Seegel
Du kannst übrigens wahrscheinlich char* data statt char data[] schreiben, das spart ein Token ;)

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

65

26.10.2008, 20:35

Ist mir schon klar. Darauf zielte folgende Frage von mir ab:

Zitat von »"S.Seegel"«

Und noch eine Frage: ist es erlaubt, Konstrukte zu verwenden, die ein Warning erzeugen ?

Hast du denn meine Daten verstanden ? ;)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

66

26.10.2008, 21:00

Hm? Warum sollte so ein Konstrukt denn eine Warnung erzeugen? Es muss doch gehen, weil sowas auch schon zu C Zeiten üblich war und es da noch kein const gab (falls du das const meinst). Der MS Compiler sagt da jedenfalls auch bei höchster Stufe nichts zu, aber wahrscheinlich findet das der gcc nicht so lustig:)

Die Daten ansich hab ich mir nicht angeschaut, aber wenn du schon fragst: Das sind die römischen Ziffern in steigender Reihenfolge, jeweils je nach Einer oder Fünfer durch ein \0 oder \80 gefolgt. Wie man aber mit sowas die Eingabe irgendwie tokensparend parsen oder konvertieren soll, ist mir völlig schleierhaft :)

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

67

26.10.2008, 21:36

Zitat von »"Helmut"«

weil sowas auch schon zu C Zeiten üblich war

Genau. War. Ist wohl mittlerweile in C++ nicht mehr gerne gesehen (wie du selbst schon geschrieben hast, sollen Pointer auf char, die mit einer Zeichenkettenkonstante initialisiert werden, als const deklariert werden) :

Zitat von »"g++"«

In file included from main.cpp:26:
my_translator.cpp: In function »void my_nickname::translate_number(const char*, char*)«:
my_translator.cpp:14: Warnung: veraltete Konvertierung von Zeichenkettenkonstante in »char*«


Zitat von »"Helmut"«

Wie man aber mit sowas die Eingabe irgendwie tokensparend parsen oder konvertieren soll, ist mir völlig schleierhaft :)

Mir auch :p ! Du hast beinahe alles erkannt, was erkennbar sein sollte. Falls jemand versuchen sollte, Hinweise zu meinem Ansatz zu finden. Ist aber frei aus der Luft gegriffen :badgrin:

68

29.10.2008, 16:36

Kann mir mal jemand sagen, was nun alles auf Vorrat angelegt werden darf. Fallen in die 8KByte auch lokale Variablen, die ich im Programmabschnitt dann nicht mehr zu deklarieren brauch? Z.B. fuer Schleifen etc.:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
char* data = ....;
char* more_date = ...;
int x, y;

// hier anfangen zu zaehlen
    x = 0;
    ... funktion code
    while( x < 42 )
    {
       
    }
// ende mit zaehlen

Wenn ja, bin ich bei der Uebersetzung von Roemisch -> Binaer bei 31 Token, ueber den Rest habe ich noch nicht nachgedacht.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

69

29.10.2008, 16:58

Zitat von »"David Scherfgen"«

Zitat von »"Florianx"«

edit: was genau sollen jetzt diese 8k eingentlich sein?
Code-Größe oder String-Größe?

String-Größe

Es geht also nur um Zeichenketten, nicht um lokale Variablen.

David hat darüber hinaus aber noch eine Einschränkung verfügt:

Zitat von »"David Scherfgen"«

Es dürfen nun 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.

Alles klar ?

Alle Achtung für deinen Parser in nur 31 Token ! Solchen Ansporn brauch ich ;)

Helmut

5x Contest-Sieger

Beiträge: 692

Wohnort: Bielefeld

  • Private Nachricht senden

70

29.10.2008, 18:24

Zitat von »"knivil"«

Kann mir mal jemand sagen, was nun alles auf Vorrat angelegt werden darf. Fallen in die 8KByte auch lokale Variablen, die ich im Programmabschnitt dann nicht mehr zu deklarieren brauch? Z.B. fuer Schleifen etc.:

Die 8KB gelten glaube ich nur für Strings, an den Token ändert sich dadurch garnichts.

C-/C++-Quelltext

1
2
char* data = "\x12\xfe";
wchar_t* more_data = L"\x1234\xfedc";

Der Code hat zB 9 Bytes an Daten und 12 Token.

(gehört wchar_t eigentlich zum C++Standard?)

Ciao
Sei stets geduldig gegenüber Leuten, die nicht mit dir übereinstimmen. Sie haben ein Recht auf ihren Standpunkt - trotz ihrer lächerlichen Meinung. (F. Hollaender)

Werbeanzeige