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

101

22.01.2008, 10:01

Zitat von »"TGGC"«

Und sag mal, warum hattest du in dem Test denn keine langen Worte mehr, die keine (bzw. nicht komplett) Palindrome waren? Hihi. f'`8k

Ach, das hatte keinen besonderen Grund. f'`8k

Zitat von »"David_pb"«

Das kann man so nicht sagen! :) Ich hätte für ein i += 2 zwei fünf Token mehr benötigt! ;)

Wie jetzt?

C-/C++-Quelltext

1
2
++ ++ i // 3 Token

i += 2 // 3 Token

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

102

22.01.2008, 10:20

Zitat von »"David Scherfgen"«


Zitat von »"David_pb"«

Das kann man so nicht sagen! :) Ich hätte für ein i += 2 zwei fünf Token mehr benötigt! ;)

Wie jetzt?

C-/C++-Quelltext

1
2
++ ++ i // 3 Token

i += 2 // 3 Token


Aber "i += 2" kann nicht in den boolschen Ausdruck mit rein, d.h. ich brauch zusätzlich eine If-Abfrage + Rumpf + Semikolon! ;)
@D13_Dreinig

David Scherfgen

Administrator

  • »David Scherfgen« ist der Autor dieses Themas

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

103

22.01.2008, 10:34

Zitat von »"David_pb"«

Aber "i += 2" kann nicht in den boolschen Ausdruck mit rein, d.h. ich brauch zusätzlich eine If-Abfrage + Rumpf + Semikolon! ;)

Ah ja. Das ist wegen der Operatorpräzedenz. Wenn du Klammern um i += 2 setzt, dann geht's auch ohne if-Abfrage + Rumpf + Semikolon, ist aber natürlich trotzdem 2 Token länger.

Bugger

Frischling

Beiträge: 66

Wohnort: Bezirk Freistadt

Beruf: EDVO HTL Schüler

  • Private Nachricht senden

104

22.01.2008, 10:49

Jo, war n toller Contest :) und natürlich Gratulation den beiden Gewinner - wenn ich mir eure Lösungen anschaue weiß ich das ich noch einiges dazulernen kann ;)
Dann mal bis zum nächsten Contest - also hoffentlich bis bald :D
Hältst du nicht den Bug in Ehren, wird er dich noch manches Lehren.

Ein Gespräch setzt voraus, dass der andere Recht haben könnte.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

105

22.01.2008, 10:49

Zitat von »"David Scherfgen"«

Zitat von »"David_pb"«

Aber "i += 2" kann nicht in den boolschen Ausdruck mit rein, d.h. ich brauch zusätzlich eine If-Abfrage + Rumpf + Semikolon! ;)

Ah ja. Das ist wegen der Operatorpräzedenz. Wenn du Klammern um i += 2 setzt, dann geht's auch ohne if-Abfrage + Rumpf + Semikolon, ist aber natürlich trotzdem 2 Token länger.


Stimmt, wär auch ne Alternative gewesen.
@D13_Dreinig

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

106

22.01.2008, 11:26

Zitat von »"David Scherfgen"«

Da hat David_pb doch tatsächlich eine rekursive Lösung hingekriegt, ohne statische Variablen zu benutzen oder eine separate Funktion zu schreiben! Und das obwohl TGGC im Chat sagte, dass dies nicht möglich sei! ;)

Zitat von »"TGGC"«

Nicht das es nicht moeglich ist, sondern das es zu lang ist, um zu gewinnen. Man muesste jetzt mal schauen, ob man David_pb Loesung kuerzer formulieren kann, wenn man die Rekursion in eine Schleife umformuliert.


Ich habe es zwischenzeitlich auch mal mit einer rekursiven Variante versucht, und bin ebenfalls auf 76 Token gekommen, wie auch schon mit der eingereichten iterativen Lösung.

Das Ganze sieht dann so aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
size_t my_palindrome(const char* p_string)
{
    size_t length = *p_string ? my_palindrome(p_string + 1) : 0;
    const char *last = p_string;
    
    while (*last)
        for (const char *p = p_string, *q = last++; p <= q && *p == *q;)
            length = --q < ++p && last-p_string > length ? last-p_string : length;
    
    return length;
}


Die 10 zusätzlichen Token für die Rekursion bei der Initialisierung von length entsprechen genau der while-Schleife, die sie ersetzt:

C-/C++-Quelltext

1
2
3
4
5
while (*p_string)
{
    ...
    p_string++;
}


Also zumindest für meinen Ansatz sind die iterative bzw. rekursive Lösung in Bezug auf die Token-Anzahl gleichwertig. Aber ich bin ja auch nicht an die Gewinner herangekommen ;-)

107

22.01.2008, 12:53

Bischen langweilig das mit nur den paar zu testen findet ihr nicht? Oo
Natürlich gut von allen, die besser waren, aber die sind einfach falsch, hab den Test grade noch für alle andern am laufen, aber seit 10min nix mehr gefunden.

Quellcode

1
2
3
4
5
6
Fehler bei Fkt #palindrome_davidpb
Reference: 2 / palindrome_davidpb: 1
Pre-Data Dump:
96 88 d9 bc 24 b8 15 e8 c6 97 8f 2f 4e bf 81 ed 35 8b 8f 1
Data Dump:
88 f2 8d 45 51 9b 12 61 40 28 3d d7 b0 16 93 d5 cf a8 bd 95 3f 4c c4 8d b 45 7a 40 d0 9 41 58 fb ce 9d 4c 69 af ad aa d7 ea 81 88 1 14 5d d0 bc 1a 65 fc 67 2a 89 72 6f 4 b3 40 d f4 98 9 c3 36 55 2c e5 3 d6 bd ed 57 45 ee 6b a2 be 28 bc 24 24 23 4e ad 96 bd b1 49 fd bf 3d 96 c8


Quellcode

1
2
3
4
5
6
Fehler bei Fkt #palindrome_helmut
Reference: 1 / palindrome_helmut: 2
Pre-Data Dump:
88 3 26 45
Data Dump:
ab 35 52 50 7 33 80 5b 33 27 4c 9e f9 a9 b1 f8 38 c7 3a c5 e7 bd f3 18 d7 b1 67 60 b4 8e a5 5f c3 f7 b0 cb 2a 30 26 5e 57 72 fc 50 1b ae 48 54 75 83 19 5c 40 d 75 18 be dc 78 72 6a 1d d2 2e 14 82 f9 3e b2 1f 9c 9 92 99 59 ad 47 a1 1 bc 24 1b 19 65 28 8e 7d e6 6a f5 58 d5 12 2a 3 26 ac fc 64 5e 1b 1 67 ad 9a c0 5b e1 62 5c 9d 86 77 b6 eb 9f 44 68 85 af 5d de 84 6f 8 87 95 b5 83 fa 13 9e fb 7b 4c 95 3b a7 76 9d 3 13 24 7b ca f 1a e 78 a0 bd d5 7e 41 45 86 c8 da 3b 4b d4 4f ea cf ca 36 64 5 dd da a3 e0 ee c7 5b b8 d6 76 c6 4e 16 84 24 94 c5 69 1a 8e 43 56 d9 18 a5 c3 e7 6f f9 4c 74 d6 26 17 b7 14 de 12 cc b5 88 93 3 9e 17 27 32 dc 90 4d 6a d4 a3 44 ec 48 7 d3 b7 1 1f 2b d7 46 43 8e 5a 21 a1 27 d6 29 ba da c8 d1 1 fa ad 92 47 18 66 ea 5c 52 32 63 25 e9 64 45 15 3c 8b 58 ca e5 79 6b c 50 95 c6 2a 5d 97 2b 57 45 bd 9f 5d 23 89 b9 75 bc 1c 9b a5 81 e0 ba bd 6b 12 87 50 8c f3 5d dc 88 23 6 e5 bb 31 3c

neido

Treue Seele

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

108

22.01.2008, 13:27

haha, ich hab haushoch verloren.
naja, obwohl, eigentlich hab ich viel gewonnen
den Trick mit dem pPointer++ z.B
Außerdem hab ich gar ned gewusst, dass man die Schleifenklammern auch genau so wie die Ifklammern weglassen kann. Hab jetzt meinen Ansatz mit diesem Klammerntrick reduziert und bin auf 106 gekommen. ändert ned viel, aber war sehr lehrreich. Das nächtste Mal "verliere" ich schon knapper.
bin gespannt auf die nächste Aufgabe,
neido

Anonymous

unregistriert

109

22.01.2008, 13:46

Zitat von »"S.Seegel"«

Also zumindest für meinen Ansatz sind die iterative bzw. rekursive Lösung in Bezug auf die Token-Anzahl gleichwertig.
Dann hab ich mich wohl tatsaechlich geirrt. f'`8k


Gruß, TGGC (making great games since 1992)

S.Seegel

2x Contest-Sieger

  • Private Nachricht senden

110

22.01.2008, 14:11

Ich kann die von Entenwickler berichteten Fehler bestätigen.

Für all diejenigen, die es selbst testen wollen, hier nochmal die fraglichen Zeichenketten in cut'n'paste geeigneter Form:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
"\x88\xf2\x8d\x45\x51\x9b\x12\x61"
"\x40\x28\x3d\xd7\xb0\x16\x93\xd5"
"\xcf\xa8\xbd\x95\x3f\x4c\xc4\x8d"
"\x0b\x45\x7a\x40\xd0\x09\x41\x58"
"\xfb\xce\x9d\x4c\x69\xaf\xad\xaa"
"\xd7\xea\x81\x88\x01\x14\x5d\xd0"
"\xbc\x1a\x65\xfc\x67\x2a\x89\x72"
"\x6f\x04\xb3\x40\x0d\xf4\x98\x09"
"\xc3\x36\x55\x2c\xe5\x03\xd6\xbd"
"\xed\x57\x45\xee\x6b\xa2\xbe\x28"
"\xbc\x24\x24\x23\x4e\xad\x96\xbd"
"\xb1\x49\xfd\xbf\x3d\x96\xc8\0",

"\xab\x35\x52\x50\x07\x33\x80\x5b"
"\x33\x27\x4c\x9e\xf9\xa9\xb1\xf8"
"\x38\xc7\x3a\xc5\xe7\xbd\xf3\x18"
"\xd7\xb1\x67\x60\xb4\x8e\xa5\x5f"
"\xc3\xf7\xb0\xcb\x2a\x30\x26\x5e"
"\x57\x72\xfc\x50\x1b\xae\x48\x54"
"\x75\x83\x19\x5c\x40\x0d\x75\x18"
"\xbe\xdc\x78\x72\x6a\x1d\xd2\x2e"
"\x14\x82\xf9\x3e\xb2\x1f\x9c\x09"
"\x92\x99\x59\xad\x47\xa1\x01\xbc"
"\x24\x1b\x19\x65\x28\x8e\x7d\xe6"
"\x6a\xf5\x58\xd5\x12\x2a\x03\x26"
"\xac\xfc\x64\x5e\x1b\x01\x67\xad"
"\x9a\xc0\x5b\xe1\x62\x5c\x9d\x86"
"\x77\xb6\xeb\x9f\x44\x68\x85\xaf"
"\x5d\xde\x84\x6f\x08\x87\x95\xb5"
"\x83\xfa\x13\x9e\xfb\x7b\x4c\x95"
"\x3b\xa7\x76\x9d\x03\x13\x24\x7b"
"\xca\x0f\x1a\x0e\x78\xa0\xbd\xd5"
"\x7e\x41\x45\x86\xc8\xda\x3b\x4b"
"\xd4\x4f\xea\xcf\xca\x36\x64\x05"
"\xdd\xda\xa3\xe0\xee\xc7\x5b\xb8"
"\xd6\x76\xc6\x4e\x16\x84\x24\x94"
"\xc5\x69\x1a\x8e\x43\x56\xd9\x18"
"\xa5\xc3\xe7\x6f\xf9\x4c\x74\xd6"
"\x26\x17\xb7\x14\xde\x12\xcc\xb5"
"\x88\x93\x03\x9e\x17\x27\x32\xdc"
"\x90\x4d\x6a\xd4\xa3\x44\xec\x48"
"\x07\xd3\xb7\x01\x1f\x2b\xd7\x46"
"\x43\x8e\x5a\x21\xa1\x27\xd6\x29"
"\xba\xda\xc8\xd1\x01\xfa\xad\x92"
"\x47\x18\x66\xea\x5c\x52\x32\x63"
"\x25\xe9\x64\x45\x15\x3c\x8b\x58"
"\xca\xe5\x79\x6b\x0c\x50\x95\xc6"
"\x2a\x5d\x97\x2b\x57\x45\xbd\x9f"
"\x5d\x23\x89\xb9\x75\xbc\x1c\x9b"
"\xa5\x81\xe0\xba\xbd\x6b\x12\x87"
"\x50\x8c\xf3\x5d\xdc\x88\x23\x06"
"\xe5\xbb\x31\x3c\0"

Werbeanzeige