wpc111



  • 68... Headhunter, bist du sicher, dass du dich nicht verzählt hast? Ich finde nichts mehr... 😞

    EDIT: Tadaaaa, 66. Wo ein Wille ist, ist auch ein Weg 😃 .
    Naja, die 66 sind mit Hilfe des Präprozessors. Gilt das? Ansonsten habe ich nur 67... 😞



  • MaSTaH schrieb:

    68... Headhunter, bist du sicher, dass du dich nicht verzählt hast? Ich finde nichts mehr... 😞

    EDIT: Tadaaaa, 66. Wo ein Wille ist, ist auch ein Weg 😃 .
    Naja, die 66 sind mit Hilfe des Präprozessors. Gilt das? Ansonsten habe ich nur 67... 😞

    die leutchen expanieren zuerst alle präproz-anweisungen. bringt also nix.



  • was bedeuten die zahlen?



  • 71. aber die nacht ist ja anoch jung...



  • hab endlich 67.



  • neuling1 schrieb:

    was bedeuten die zahlen?

    tokens, die man für die wpc-frage dieser woche braucht (siehe sig).



  • wie zählt man die auf einfache art, bzw zählt man da auch ; und , mit?
    Hab nämlich auch grad die funktion geschrieben



  • ChockoCookie schrieb:

    wie zählt man die auf einfache art, bzw zählt man da auch ; und , mit?

    alles wird gezählt. ein token ist was, wo man kein leerzeichen reinschreiben darf, ohne daß es kaputtgeht.
    siehe http://www.c-plusplus.net/forum/viewtopic.php?t=70888&highlight=
    wir zählen der einfachheit halber aber nicht das, was eh sicher gleich bleibt, also den funktionskopf und die äußeren geschweiften klammern.

    60



  • volkard schrieb:

    60

    😮 ich glaube ich bleibe auf den 67 hängen... Wie hast du das gemacht? Ich habe die Auswertung bei der Rückgabe auf ein Minimum verkürzt (19 oder so). Irgendwas mache ich beim auslesen der Operanden und des Operators anscheinend falsch 😞 .



  • MaSTaH. schrieb:

    volkard schrieb:

    60

    😮 ich glaube ich bleibe auf den 67 hängen... Wie hast du das gemacht? Ich habe die Auswertung bei der Rückgabe auf ein Minimum verkürzt (19 oder so). Irgendwas mache ich beim auslesen der Operanden und des Operators anscheinend falsch 😞 .

    jo, die ausgabe hat auch bei mir 19.
    und unter 71 bin ich eh nur gekommen, weil ihr so unglaublich tiefe zahlen gesagt habt, daß ich in winkelzügen gedacht hab, die sonst nur bashar kann (womit einen verwendete rogrammiertechnik bereits aufgedeckt ist 😉 ).

    dem hörensagen nach sind aber 55 zu schlagen.



  • volkard schrieb:

    [..]
    jo, die ausgabe hat auch bei mir 19.
    und unter 71 bin ich eh nur gekommen, weil ihr so unglaublich tiefe zahlen gesagt habt, daß ich in winkelzügen gedacht hab, die sonst nur bashar kann (womit einen verwendete rogrammiertechnik bereits aufgedeckt ist 😉 ).

    [..]

    Ausgabe hat 19? Wow, und ich dachte 21 wäre nicht zu schlagen.
    Was sind Winkelzüge? Motivation durch unrealistische Ziele, das klingt gut, kannst du das weiter erläutern 😉 ?

    Noch ne Frage an die Runde:
    Kann Eure Version Aufgaben in der Art rechnen: "-3+4" ?
    In der Aufgabenstellung stand ja sie möchten Integers haben..
    Meine kanns nicht, wie siehts bei euch aus?



  • meine kann auch nicht. ist aber nicht explizit gesagt worden. naja, haben sie wenigstens wieder einen grund volkard zu kicken 😃 .

    @volkard: kannst du das nach abgabeschluss mal posten? würde mich jetzt stark interessieren in welchen winkelzügen du gedacht hast.



  • MaSTaH schrieb:

    meine kann auch nicht. ist aber nicht explizit gesagt worden. naja, haben sie wenigstens wieder einen grund volkard zu kicken 😃 .

    ich hab diesbezüglich angefragt.

    <deepak-p@eth.net>:
        chnisi04.eth.net [202.9.145.104]:
    >>> DATA
    <<< 452 chnisi04.eth.net: Server too busy
    


  • So, 12:00pm Zentralindischer Zeit dürfte vorbei sein 😃 . Habs vor ner halben Stunde abgeschickt! Meine 67-Token-Lösung ist:

    int wpc111(char* str) {
      int a = 0, b = 0, t;
      while(t = *str++ - 42, t > 5)
        a *= 10, a += t - 6;
      while(*str)
        b *= 10, b += *str++ - 48;
      return t-- ? a - --t * b : a * b;
    }
    

    Bin mal gespannt was ihr so fabriziert habt.



  • Ich bin nicht unter 60 Token gekommen:

    int wpc111(char* str)
    {
    	int i = 0, j, op ;                              //  9
    	while ( * str )                                 //  5
    		i = * str < 48                              //  6
    		?                                           //  1
    			op = * str ++ - 44,                     //  8
    			j = i ,                                 //  4
    			0                                       //  1
    		:                                           //  1
    			i * 10 + * str ++ - 48 ;                // 10
    
    	return op + 2 ? j - i * op : j * i ;            // 15
    	// total: 60 tokens
    }
    


  • auch 60.

    int wpc111(char* str)
    {
    	int a=0,d;//7
    	while((d=*str++)>=48)//12
    		a=a*10+d-48;//10
    	int b=d?wpc111(str):0;//12
    	return d-42?a-b*(d-44):a*b;//19
    }
    


  • Meine iterative 66 Token Version:

    // first and second number in str
    	// numbers are read into num2, so we must
    	// clear it first.
    	int num1, num2 = 0,  				// 7
    	// operator between them 
    	    op; 					// 2
    							// --
    							// 9
    
    	// while not at end of string
    	while ( *str )					// 5
    		// if current char is an operator..
    		*str < 48 ? 				// 5
    			// ..then save operator, save number, start new number
    			  op = *str++, num1 = num2, num2 = 0 : 	// 14
    			// .. else it's digit, add next digit and advance in str
    			// *str - 48 to convert from ascii code
    			  num2 = num2*10 + *str++ - 48; // 12
    							// --
    							// 36
    
    	// choose return type from operator
    	return  op == 43 ? num1+num2 : // if operator is +, return sum, else..
    	        op == 45 ? num1-num2 : // ..if op == 45 we have a -, else..
    			   num1*num2;  // ..return product *
    	// --
    	// 21
    


  • Mit sscanf() wär ich auch auf 60 🙂 - naja mal basteln 😃

    MfG SideWinder



  • MaSTaH schrieb:

    würde mich jetzt stark interessieren in welchen winkelzügen du gedacht hast.

    da ich auf normalen wegen einfach nicht runterkam, hab ich nur noch überlegt, wo ich rekursion einbringen kann, obwohl rekursion bei diesem problem gar nichts zu suchen hat. ich war sicher, daß ich euch nur noch mit nem abartigen trick schlagen kann. und beim freitagsabendkrimi ist mir es dann gekommen. die funktion kann ja auf "10+12" angewandt 22 ausgeben, indem sie das undokumentierte feature benutzt, daß sie auf "12" angewandt 12 ausgibt.
    hat aber nix grbracht, wie ich an den 60 toens von cd9000 sehe.



  • SideWinder schrieb:

    Mit sscanf() wär ich auch auf 60 🙂 - naja mal basteln 😃

    mit sscanf 60?
    OMG

    int wpc111(char* str)
    {
        int a,b,c; //7
        sscanf(str,"%d%c%d",&a,&b,&c); //16
        return b==42 ? a*c : a-c*(b-44); //19
    }
    

    es ist sogar legaler C89 code... ob ich das einschicken hätte sollen?


Anmelden zum Antworten