wpc115



  • @TomasRiker:

    Aber was machst du wenn du
    "abc" in "ababc" suchst?

    ich habe keinen compiler hier, aber das scheint dein code nicht zu decken, oder?



  • Kann pattern "" sein?



  • Hmm, hast recht, komischerweise ging es zuvor noch.
    Ich habe wohl etwas viel optimiert 😃
    Mit Korrektur sind es 6 Tokens mehr.



  • hmm also gegen die rekursive lösung scheint kaum eine ankommen drin zu sein... oder hat einer ne iterative lösung mit rund 50 tokens?



  • Windalf schrieb:

    hat einer ne iterative lösung mit rund 50 tokens?

    54

    und ne illegale (wegen strstr und strlen) von wesentlich weniger tokens 😉

    @tag:
    sicher bin ich mir nicht. aber ich wüsste nicht was ein leerer pattern string bringen sollte. ich nehme deshalb an, dass er nicht leer sein darf. würde nämlich so ziemlich jeden code fehlschlagen lassen.



  • hmm also alle meine versuche bringen mich nicht wirklich weiter...

    bei der von Striker könnte man sowas in der art versuchen was nochmal ein wenig zeichen spart...

    int wpc115(char* master, char* pattern){
    
        char * patternBackup = pattern; 
    
        while(* master && *pattern)
    		* pattern ++ != * master ++ && (pattern = patternBackup) ;    
    	return * pattern ? 0 : 1 + wpc115 ( master , patternBackup );   
    }
    


  • Wer ist Striker?
    Meine Lösung oben war ja leider fehlerhaft.
    Jetzt habe ich eine mit 49.



  • Ich habe 47 Tokens.

    Aber ist es wirklich Sinn des Wettbewerbs seine Lösung hier zu posten?
    Sollte man das nicht besser erst nach Teilnahmeschluss machen?
    Nur so ne Idee..



  • Wer ist Striker?

    ups sorry, wollte dein nick nicht durch den kakao ziehen, war ein kleines Malheur...
    jo hab die ganze zeit versucht was brauchbar iteratives hinzubekommen aber gegen die rekusion hat man in diesem falle einfach keine chance...
    hatte mir dann halt nochmal deine Lösung angeguckt und festgestellt das bei dem return noch was zu holen ist und man sich die geschweiften klammern sparen kann...

    Aber ist es wirklich Sinn des Wettbewerbs seine Lösung hier zu posten

    gibts denn was zu gewinnen? glaub eher nicht also was hab ich davon wenn ich die Lösung zurückhalte... Macht doch eher mehr spass mit anderen zusammen die Lösung zu entwickeln...



  • also, wenn ich mich nicht vertan hab, dann bin ich auf 44.
    und bei leerem pattern wird 0 zurückgegeben.



  • ups, ich meinte 39 😉



  • Na hoffentlich ist er auch fehlerfrei 🤡

    @TomasRiker
    Dein Code findet "alaal" nicht in "alalaal"

    Mein Versuch:

    int wpc115(char *master, char *pattern)
    {
    	// remember where we started
    	char* oldpattern = pattern, *oldmaster = master;
    	// now test against the pattern
    	// make sure master always points one after the last checked character
    	while(*pattern && *pattern == *master++)
    		++pattern;
    	// If *pattern is now NUL, we've found our substring.
    	return
    		// add 1 if we've found our substring
    		!*pattern +
    		// don't search further if master is empty
    		(*master
    			// if pattern was found, continue search after the substring
    			// else continue one char after the original master string so we don't miss some substrings
    			? wpc115(*pattern ? ++oldmaster : master, oldpattern)
    			: 0);
    }
    
    // a simple test case
    #include <cassert>
    #define test(a,b,c) assert(wpc115(a, b) == c);
    int main(int argc, char* argv[])
    {
    	test("babab", "bab", 1);
    	test("xbababx", "bab", 1);
    	test("babbab", "bab", 2);
    	test("ababababa", "bab", 2);
    	test("hallo welt", "l", 3);
    	test("blablala", "blal", 1);
    	test("blablalal", "blal", 1);
    	test("alalaal", "alaal", 1);
    	test("ababc", "abc", 1);
    	test("abc", "abc", 1);
    	test("abc", "acb", 0);
    	test("a", "a", 1);
    	test("a", "b", 0);
    	return 0;
    }
    


  • @tag:
    Danke für den Hinweis.
    Und danke für Deinen Testcode.
    Also, mein neuester Versuch besteht alle Tests... 😉

    PS: Die Strg-Taste hilft in Visual C++ beim Zählen der Tokens!
    Einfach gedrückt halten und mit den Cursortasten zwischen den Tokens navigieren.



  • @tag: du kannst noch zwei klammern weglassen

    [Nachtrag]
    Meine Loesung hat 50 Tokens. In die Tests die ich gemacht hab, sind alle
    erfolgreich durchgelaufen. Aber ob ichs einschicken werden...mal sehn 🙂
    [/Nachtrag]

    mfg
    v R



  • welche Klammern denn? die beim ?: sind notwendig, weil das + eine höhere Priorität hat, die kriege ich nicht weg



  • @Windalf: Wo gabs das hier denn erst vor kurzem? Ich find nix.

    @ShadeOfMine: Dein erster Tipp bringt nicht ne Menge, sondern ein Token (wenn '\0' nur als ein Token zählt, wie jemand in #cpp meinte).

    Sorry, kann nur wenig ins Internet, deshalb antworte ich nicht öfter.

    PS: Ich hab noch nicht weiter optimiert, das kommt aber noch.



  • CME386 schrieb:

    (wenn '\0' nur als ein Token zählt, wie jemand in #cpp meinte)

    Ist nur eins. Schliesslich kannst du nicht \ 0 schreiben.



  • hat einer schon an der wpc116 aufgabe versucht...
    hab eben mal probiert und auch was hinbekommen...allerdings hab ich überhaupt keine idee wie ich das klein bekommen soll...
    rekursiv scheint diesmal irgendwie nicht der renner zu sein oder hat da schon einer was schönes..

    mein erster ansatz sieht so aus... was würdet ihr dran verbessern?

    int wpc116(char *t1, char *t2){
    	int rv=0;
    	--t1;--t2;
    	do{
    		rv*=60;
    		rv+=(*++t1-*++t2)*10 + *++t1-*++t2;
    		++t2;
    	}while(*++t1);
    return rv;
    }
    


  • Windalf schrieb:

    allerdings hab ich überhaupt keine idee wie ich das klein bekommen soll...

    nicht so schlimm

    was würdet ihr dran verbessern?

    es schneller machen.



  • Denk noch mal scharf nach! Das soll doch wohl nicht dein ernst sein. Lies dir die Aufgabe nochmal gründlich durch, mach dir klar, was die wollen und was du alles an informationen bekommst.
    Dann wirst du feststellen, dass die Aufgabe ein Witz sein muss. 🙄
    __
    Greetz, DennisB


Anmelden zum Antworten