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_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

71

14.01.2008, 09:46

Zitat von »"Databyte"«

Zitat von »"grek40"«

Zitat von »"Databyte"«


Den unterne abschnitt solltet ihr bei diesem Contest allerdings weglassen ;)

Ich wüsst nich, wieso man grad auf den , operator verzichten soll in so einer Aufgabe^^


Ne... ich meine dieses Warnkästchen unten ;)


Ja, kannst du ignorieren. Wenn du das Risiko eingehen willst das dein Programm nicht wie gewünscht läuft! :)
@D13_Dreinig

p0llux

Treue Seele

Beiträge: 101

Wohnort: Aachen

Beruf: HiWi (theo. Inf.)

  • Private Nachricht senden

72

14.01.2008, 17:39

Man kann auch tolle lebensfähige Konstrukte wie

Quellcode

1
!!*s;
benutzen um den Basisfall zu filtern, ob ein C-String 's' leer ist ;)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

73

14.01.2008, 17:48

Oder einfach:

C-/C++-Quelltext

1
*s


Naja, kommt wohl auf den Kontext an! :p
@D13_Dreinig

p0llux

Treue Seele

Beiträge: 101

Wohnort: Aachen

Beruf: HiWi (theo. Inf.)

  • Private Nachricht senden

74

14.01.2008, 17:50

Zitat von »"David_pb"«

Oder einfach:

C-/C++-Quelltext

1
*s


Naja, kommt wohl auf den Kontext an! :p


Hehe genau. Aber !!*s geht token-wise "flotter", falls kein impliziter cast erfolgt als (bool)*s :)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

75

14.01.2008, 18:03

Jo, kommt eben, wie gesagt, drauf an!

Zum Beispiel funktionieren Konstrukte wie

C-/C++-Quelltext

1
if ( *s )


oder

C-/C++-Quelltext

1
i = *s && xyz;


auch ohne explizitem Cast. ;)

Achja: 75!
@D13_Dreinig

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

76

15.01.2008, 19:25

Ich bin neu in der Runde also erstmal ein Hallo an alle :)

Ich habe zunächst den Ansatz verfolgt, jedes Zeichen des Wortes als Mittelpunkt eines Palindroms zu betrachten und dessen Ausdehnung zu bestimmt. Dabei bin ich bislang nicht unter 84 Token gekommen.

Dann habe ich mich an dem Ansatz aus der Referenzlösung versucht, also alle Teilworte überprüft, ob sie Palindrome sind. Auch hier bin ich noch nicht unter 76 Token gekommen.

Was mich jetzt brennend interessiert ist, ob ihr - insbesondere Diejenigen, die 76 Token unterbieten können ;) - eure Ergebnisse mit einem dieser Ansätze erreicht habt, oder ob ihr ganz anders heran gegangen seid.

Nur so aus Neugier, wo es sich weiter zu grübeln lohnen könnte. Bin gespannt !


PS: Dankeschön an den (die?) Organisatoren für diesen netten kleinen Knobelspaß !

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

77

15.01.2008, 19:38

Zitat von »"S.Seegel"«

Ich bin neu in der Runde also erstmal ein Hallo an alle :)

Herzlich willkommen!
Woher kommst du denn? Von developia.de?

Zitat von »"S.Seegel"«

Was mich jetzt brennend interessiert ist, ob ihr - insbesondere Diejenigen, die 76 Token unterbieten können ;) - eure Ergebnisse mit einem dieser Ansätze erreicht habt, oder ob ihr ganz anders heran gegangen seid.
Nur so aus Neugier, wo es sich weiter zu grübeln lohnen könnte. Bin gespannt !

Ja, mein Ansatz funktioniert auf diese "klassische" Art. Nur dass ich nicht von der Mitte nach außen gehe (weil es bei einem Palindrom mit einer geraden Länge kein mittleres Zeichen gibt und das somit etwas mehr Aufwand wäre), sondern vom Anfang und vom Ende nach innen.

Zitat von »"S.Seegel"«

PS: Dankeschön an den (die?) Organisatoren für diesen netten kleinen Knobelspaß !

Danke :)
"den" ist schon richtig ;)
Du darfst dich auf viele weitere Aufgaben freuen.

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

78

15.01.2008, 20:05

Zitat von »"David Scherfgen"«

Woher kommst du denn? Von developia.de?

Richtig. Dort hast du meine Aufmerksamkeit geweckt ;)

Zitat von »"David Scherfgen"«

Ja, mein Ansatz funktioniert auf diese "klassische" Art. Nur dass ich nicht von der Mitte nach außen gehe (weil es bei einem Palindrom mit einer geraden Länge kein mittleres Zeichen gibt und das somit etwas mehr Aufwand wäre), sondern vom Anfang und vom Ende nach innen.

Richtig, bei dem Ansatz vergleiche ich auch von Aussen nach Innen.

Danke für die Antwort.

Zitat von »"David Scherfgen"«

Du darfst dich auf viele weitere Aufgaben freuen.

Tue ich !

Noch was Kurioses. Die kürzeste "Lösung" - zumindest unter Linux mit g++ Version 4.1.3 und -O2 - ist

Quellcode

1
size_t my_palindrome(const char* p_string) {}

mit keinem einzigen Token :D

Hintergrund: der Rückgabewert einer Funktion wird im eax Register des Prozessors abgelegt. Da die Referenzimplementierung vor my_palindrome() aufgerufen wurde, liegt deren korrekter Rückgabewert noch in besagtem Registern (da zwischen den Funktionsaufrufen keine weiteren Anweisungen stehen). Also reicht es, in my_palindrome eax nicht zu modifizieren, in dem man am einfachsten gar nichts tut.
Der Kontroll-Code findet so in eax das korrekte Ergebnis.

Keine Ahnung, ob dieser Effekt auch mit dem Microsoft Compiler reproduzierbar ist.

rootnode

Frischling

Beiträge: 92

Wohnort: Aachen, Pontstraße

Beruf: Student

  • Private Nachricht senden

79

15.01.2008, 20:15

Nein, er meckert wegen dem fehlenden return!

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

80

15.01.2008, 20:26

So ginge es, dann gibt's nur eine Warnung:

C-/C++-Quelltext

1
2
3
4
size_t my_palindrome(const char* p_string)
{
    if(!p_string) return 0;
}

Werbeanzeige