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 <
010
03.06.2008, 16:03 Uhr
kronos
Quotenfisch
(Operator)


Hm, komm grad nicht unter 55:

C++:
if(*s)f(s+1);if(*s<s[1]){int t=*s;*s=s[1];s[1]=t;f(s);}

Hat mittlerweile jemad rausgefunden ob der xor-swap so in Ordnung geht? Bei mir funktioniert er nämlich nicht auf den array-Feldern...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
03.06.2008, 22:28 Uhr
kronos
Quotenfisch
(Operator)



C++:
int t=*s++;if(t)f(s);if(t<*s){*(s-1)=*s;*s=t;f(s);}

51!
Huldigt mir!
Warum entdeck ich die Rätsel immer erst, wenn keiner mehr mitmacht...
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
04.06.2008, 14:39 Uhr
Lensflare



Hab schon auf dich gewartet

51 Zeichen... wow! Respekt!
--
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
013
04.06.2008, 18:51 Uhr
0xdeadbeef
Gott
(Operator)


Um...das funktioniert so aber leider nicht. Wenn t=*s++ null ist, also am Ende des Strings, erzeugt if(t<*s) undefiniertes Verhalten, weil s jetzt hinter das Ende zeigt. Das selbe gilt natürlich für die Zuweisungen, für den Fall, dass t<*s (welches undefiniert ist) als wahr interpretiert wird. Du wirst schon noch zwei geschweifte Klammern spendieren müssen - im Gegenzug kannst du aber für *(s-1) auch s[-1] schreiben, was ein Zeichen spart.

Nachtrag: Um...und jetzt, wo ich den Kram mal in meinen Compiler gegeben habe...naja...mit

C++:
char testString[] = "mncoaciewhfmankajsdh";


Gibt mir das

Code:
wsonnmmkjihhfedccaaa


bzw. Mit den Klammern

Code:
wsonnmmkjihhfedccaaa


...was irgendwie rückwärts aussieht.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 04.06.2008 um 18:57 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
04.06.2008, 20:12 Uhr
kronos
Quotenfisch
(Operator)


Von aufsteigend sortieren war nirgends die Rede, oder?


Zitat von 0xdeadbeef:
Um...das funktioniert so aber leider nicht. Wenn t=*s++ null ist, also am Ende des Strings, erzeugt if(t<*s) undefiniertes Verhalten, weil s jetzt hinter das Ende zeigt.

Berechtigter Einwand. Hier die gefixte Variante mit nur noch 46 Zeichen:

C++:
int t=*s++;t?f(s),t<*s?s[-1]=*s,*s=t:7,f(s):7;


Zu was der Komma-Operator nicht alles gut ist... so langsam könnten wir mal einen vergolfizierungs-Programm schreiben, das zumindest die Syntax optimiert.

Hach, das Internet, der natürlich Feind der Hausarbeit... :-/
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 04.06.2008 um 21:34 Uhr von kronos editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
04.06.2008, 23:43 Uhr
0xdeadbeef
Gott
(Operator)


...nur, dass

C++:
f(s),t<*s?s[-1]=*s,*s=t:7,f(s)


ein void-Ausdruck ist, und dementsprechend nicht in einem ?:-Ausdruck benutzt werden kann. So dagegen:

C++:
int t=*s++;t?f(s),t<*s?s[-1]=*s,*s=t:7,f(s),7:7;


wird ein Schuh draus.

Allerdings: Clevere Idee, muss ich zugeben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
05.06.2008, 02:17 Uhr
kronos
Quotenfisch
(Operator)


Gut, dann bleibt's für's erste bei 47:

C++:
int t=*s++;if(t)f(s),t<*s?s[-1]=*s,*s=t:7,f(s);

Es sei denn es gibt einen ein-buchstabigen void-Ausdruck...?
--
main($)??<-$<='?'>>2?main($-!!putchar(
(("$;99M?GD??(??/x0d??/a:???;a"+'?'/4)
??($??)+'?'/3-2-1+$%2)??''?')):'?';??>

Dieser Post wurde am 05.06.2008 um 02:19 Uhr von kronos editiert.
 
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: