Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » Sort-Golf

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.05.2008, 10:45 Uhr
Lensflare



Hallo

Wie wäre es mit folgendem Golfrätsel:
Eine Funktion schreiben, die eine Zeichenkette sortiert (nach ASCII Tabelle).


C++:
#include <stdio.h>

char testString[21] = "mncoaciewhfmankajsdh"; //nur ein Beispiel

void f(char* s)
{
//hier zählen die zeichen
}

int main()
{
    f(testString);
    printf(testString);
    getchar();
}



keine zusätzlichen includes oder Funktionen
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 19.05.2008 um 10:46 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.05.2008, 15:39 Uhr
0xdeadbeef
Gott
(Operator)


Im ersten Anlauf 73:

C++:
char c,*p;if(*s){f(s+1);for(p=s;p[1]&&*p>p[1];++p){c=*p;*p=p[1];p[1]=c;}}


...da kann man aber bestimmt noch mehr rausholen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.05.2008 um 15:40 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.05.2008, 20:40 Uhr
Lensflare



Ich habs mit Bubble Sort probiert und nach dem 4. Anlauf nur 78 hinbekommen :/


C++:
for(char*a=s,g=1;g;s=a+1)for(g=0;*s;s++)if(*(s-1)>*s)g=*s^=*(s-1)^=*s^=*(s-1);


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 19.05.2008 um 20:41 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.05.2008, 21:07 Uhr
Lensflare



Nachdem ich mir deinen Code angeschaut habe, ist mir aufgefallen dass ich bei mir *(s+1) mit s[1] abkürzen könnte. also habe ich es bei mir so umgeschrieben, dass s-1 wegfällt und nur noch s+1 vorhanden ist. Und dann gekürzt.

Jetzt bin ich bei 72 Zeichen


C++:
for(char*a=s,g=1;g;s=a)for(g=0;s[1];s++)if(*s>s[1])g=s[1]^=*s^=s[1]^=*s;


--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.05.2008, 22:04 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


ähm wo hast du g deklariert? a ist deklariert, s ist deklariert, aber g?
--
class God : public ChuckNorris { };

Dieser Post wurde am 19.05.2008 um 22:05 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.05.2008, 22:37 Uhr
Lensflare



in der ersten for schleife
char*a=s,g=1
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.05.2008, 23:03 Uhr
0xdeadbeef
Gott
(Operator)



C++:
g=s[1]^=*s^=s[1]^=*s


...ist das definiertes Verhalten? Ich bin mir grad nicht sicher.

Oh, übrigens, so nebenbei - wenn wir hier von C reden, muss das Hauptprogramm so aussehen:

C++:
int main(void)
{
    f(testString);
    puts(testString);

    return 0;
}


...und wenn nicht, in C++ benutzen wir doch bitte nicht stdio.h.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.05.2008 um 23:11 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.05.2008, 23:15 Uhr
Lensflare



ok das mit return 0; könnte man noch hinzufügen, aber wieso das printf mit puts ersetzen?


Zitat:

...ist das definiertes Verhalten? Ich bin mir grad nicht sicher.


Hm, ich hoffe mal ^^
Wäre ja schlimm wenn nicht
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 19.05.2008 um 23:25 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.05.2008, 23:31 Uhr
0xdeadbeef
Gott
(Operator)


Okay, zweiter Anlauf: 60

C++:
int c;if(*s){f(s+1);for(;s[1]&&*s>s[1];*++s=c)c=*s,*s=s[1];}


bzw. in C99 59:

C++:
if(*s){f(s+1);for(int c;s[1]&&*s>s[1];*++s=c)c=*s,*s=s[1];}



Was das Hauptprogramm angeht: printf(variable); ist äußerst schlechter Stil - insbesondere bei Benutzereingaben, aber auch sonst kann das daneben gehen. Was, wenn variable ein Prozentzeichen enthält? puts(variable); ist äquivalent zu printf("%s\n", variable);, allerdings in der Regel etwas performanter.

Was das definierte Verhalten angeht, die Argumentation ist die selbe wie bei i = a[i++] = ++i; = ist kein Sequenzpunkt, wenn mich grad nicht alles täuscht, daher kannst du dir nicht sicher sein, in welcher Reihenfolge die Nebeneffekte auftreten. Ich müsste das allerdings nachschlagen, und ich hab meinen C-Standard grad nicht hier.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 19.05.2008 um 23:37 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
03.06.2008, 15:31 Uhr
kronos
Quotenfisch
(Operator)


Hallo,
60 im ersten Ansatz, einen Moment bitte.
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: