Signatur von DrGreenthumb



  • syn0ps1s schrieb:

    Mich würde es sehr interessieren, wie man dieses Gebilde step by step auseinander nehmen und dann einen "normal-strukturierten" C-Code bilden kann.

    du könntest zunächst die ?:-Paare durch ifs ersetzen.



  • Hi r0nny, DrGreenthumb,

    Ich werde es heute mal aufstellen und zur Korrektur hier nochmals einfügen, nicht dass ich ein falscher code analysiere. Aber danke vielmals!!!

    gruss syn0ps1s



  • Lustiges Programm. Ich hab das ganze aus Neugier auch mal auseinandergebastelt und im Debugger angeguckt.
    So kann man es auch ganz gut verstehen.

    main(k)
    {
    	int c;
    	int a;
    	int b;
    	int d;
    	for(k=0;k<125;++k)
    	{	
    		if((k+1)%25)
    		{
    			a="[k<qFUF>XB]X=9V=hm9FC"[k/6];
    			b=a-52;
    			d=b&1<<k%6;
    
    			if(d)
    				c=64;
    			else
    				c=32;
    
    		}
    		else
    			c=10;
    
    		putchar(c);	
    	}
    }
    


  • hi, _sepp_ du bist fies, jetzt hast du mir die denkarbeit weggenommen :p

    egal. ich kapier das nicht:

    a="[k<qFUF>XB]X=9V=hm9FC"[k/6];
    

    und

    d=b&1<<k%6;
    

    Kann mir jemand hier helfen? Danke

    Gruss syn0ps1s



  • syn0ps1s schrieb:

    egal. ich kapier das nicht:

    a="[k<qFUF>XB]X=9V=hm9FC"[k/6];
    

    a wird ein element des arrays "[k<qFUF>XB]X=9V=hm9FC" zugewiesen.
    solange k<6 ist es das element von position 0
    ist k>=6 aber <12 dann von position 1
    bei 12 bis 17 position 2
    usw...

    syn0ps1s schrieb:

    und

    d=b&1<<k%6;
    

    mach' klammern drum. z.b. so:

    d= b & (1 << (k % 6));
    


  • syn0ps1s schrieb:

    egal. ich kapier das nicht:

    a="[k<qFUF>XB]X=9V=hm9FC"[k/6];
    

    Ist dasselbe wie

    const char * const foo="[k<qFUF>XB]X=9V=hm9FC";
    a = foo[k/6];
    

    und

    d=b&1<<k%6;
    

    Das erste Bit von b von rechts wird um k mod 6 Stellen nach links verschoben und in d gespeichert.



  • Michael E. schrieb:

    Das erste Bit von b von rechts wird um k mod 6 Stellen nach links verschoben und in d gespeichert.

    nö, das ergebnis der 'und-verknüpfung' von b und 2^(k mod 6) wird in d gespeichert.



  • So ich bin's, __sepp__, hab mich jetzt mal registriert hier.

    Also:

    "[k<qFUF>XB]X=9V=hm9FC"
    

    ist ein Array aus Characters, darauf wird mit

    [k/6]
    

    zugegriffen, also bei den ersten 6 Iterationen wird auf das erste Element des Arrays zugegriffen (k/6=0), bei den nächsten 6 Iterationen auf das zweite Element (k/6=1) usw...

    Für

    d=b&1<<k%6;
    

    musste ich mir erstmal angucken in welcher Prioritätsreihenfolge die einzelnen Operatoren abgearbeitet werden.
    Zuerst wird k%6 berechnet, dann wird so oft die 1 nach links geshiftet.
    Beispiel: k=4-> k%6 = 4 -> 1<<k%6 = 010000.

    Das ganze wird ver-undet mit b und dabei kommt entweder 0 raus oder nicht, hängt von b ab.

    Dahinter steckt also, dass die Bits der einzelnen Zeichen in dem Array (minus 52) das Muster für die einzelnen Zeilen angeben (naja vll etwas blöd ausgedrückt aber egal)



  • vielleicht kennt einer den noch nicht

    main(a){printf(a,34,a="main(a){printf(a,34,a=%c%s%c,34);}",34);}
    

    ich weiss, eigentlich ein alter hut...



  • Koennte ein Quine sein...


Anmelden zum Antworten