wpc115
-
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
-
DennisB schrieb:
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, DennisBIch bin der gleichen Meinung.. ein Witz ist das!
-
DennisB schrieb:
Dann wirst du feststellen, dass die Aufgabe ein Witz sein muss.

warum?
-
volkard schrieb:
DennisB schrieb:
Dann wirst du feststellen, dass die Aufgabe ein Witz sein muss.

warum?
5 Multiplikationen, 6 Additionen und 6 mal subtrahieren.
Das ganze 10 Minuten nachdem der unoptimiere Prototyp fertig war, alles in allen vielleicht 20 Minuten "Arbeitsaufwand".
Wenns schneller geht, ich wüsste gerne wie!
-
Jo, da haben wir wohl identischen Code fabriziert *g*
Habe mich auch gewundert...
Geht das noch schneller?
-
ich baue noch am testefälle-erzeuge-und-mess-programm.
warum sollte es nicht schneller gehen? ich glaub' da ist noch was drin.
wenn ich erste ergebnisse habe, poste ich sie in nem thread namens wpc116.
-
also ich habe 6- 5+ und 5*
also ein + weniger
aber den unterschied macht auf jeden fall der zugriff auf die einzellnen zahlen
da hebe ich die unterschiede meiner versuche drastisch gemerktcu
-
Headhunter schrieb:
volkard schrieb:
DennisB schrieb:
Dann wirst du feststellen, dass die Aufgabe ein Witz sein muss.

warum?
5 Multiplikationen, 6 Additionen und 6 mal subtrahieren.
jo, genau das hab ich auch..
hm korrektur.. doch 5* 5+ und 6-
-
stahl schrieb:
Headhunter schrieb:
volkard schrieb:
DennisB schrieb:
Dann wirst du feststellen, dass die Aufgabe ein Witz sein muss.

warum?
5 Multiplikationen, 6 Additionen und 6 mal subtrahieren.
jo, genau das hab ich auch..
hm korrektur.. doch 5* 5+ und 6-
Mmh, auch verzählt.
Hab auch die gleichen Werte
-
Ich auch

-
was denkt ihr über meine lösung:
int wpc116b(char* t1, char* t2) { double t1stund, t1minut, t1sekund=0.0;//var von t1 double t2stund, t2minut, t2sekund; // t2 var's sscanf(t1, "%f:%f:%f", &t1stund , &t1minut, & t1sekund);//umwnadeln v.t1 nach zeit sscanf(t2, "%f:%f:%f", &t2stund, &t2minut, &t2sekund); //t2 umwadneln double zeit1 = t1sekund+t1minut *60+t1stund* 60.0* 60; double zeit2= t2sekund+t2minut *60+t2stund *60 *60.0;//doppelt mahl nehmen return int(zeit2- zeit1);//dieferenz ist zeitsekunden zw. t1&t2 }