wpc111
-
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?
OMGint 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?
-
Shade Of Mine schrieb:
SideWinder schrieb:
Mit sscanf() wär ich auch auf 60
- naja mal basteln
mit sscanf 60?
OMGint 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?
Bin inzwischen drunter, war bloß meine erste überlegung -> einfachste variante: variablen, sscnaf, switch, return
Also mich nicht sofort aufgeben, danke
MfG SideWinder
-
Sieht hier jemand noch Optimierungsvorschläge? Komme bloß auf 62. Soll die Funktion mehr als ein Mal funktionieren brauch ich sogar 66
int wpc111 (char *str) { static char op ; // 4 int zahl = 0 ; // 5 == 9 while ( * str > 47 ) // 7 zahl = zahl * 10 + * str ++ - 48 ; // 12 == 19 if ( op ) // 4 return zahl ; // 3 op = * str ++ ; // 6 == 13 int zahl2 = wpc111 ( str ) ; // 8 return op == '+' ? zahl + zahl2 : // 9 op == '-' ? zahl - zahl2 : // 8 zahl * zahl2 ; // 4 == 21 == 62 }
MfG SideWinder
-
SideWinder schrieb:
Sieht hier jemand noch Optimierungsvorschläge? Komme bloß auf 62. Soll die Funktion mehr als ein Mal funktionieren brauch ich sogar 66
Jo, muss öfters funktionieren. mach op einfach zu einem int
dein return ist zu lahm, das geht wesentlich kürzer - code siehst du ja hier.
-
Was genau bringt mir op als int?
MfG SideWinder
-
Mit der neuen return bin ich dann auf 62 fix, und 58 für einmalige Benützung. Muss schauen, dass sich das automatisch resetted *g*
Edit: Gut bin jetzt fix auf 60, op ist nun normaler int und ich prüfe nicht mehr ob op bereits gesetzt wurde sondern ob ich am Ende des Strings bin und spare mir deshalb diese Behandlung - fertig.
MfG SideWinder
-
*VERZÄHLT - es sind 67*
59 Tokens:
int wpc111 (char *str) { int zahl = 0 ; // 5 == 5 while ( * str > 47 ) // 7 zahl = zahl * 10 + * str ++ - 48 ; // 12 == 19 if ( ! * str ) // 6 return zahl ; // 3 int op = * str ++ ; // 7 == 16 int zahl2 = wpc111 ( str ) ; // 8 return op == '*' ? zahl * zahl2 : // 9 zahl - zahl2 * ( op - 44 ) ; // 10 == 19 == 59 }
Aber da ist irgendwie noch mehr drin, ich hab das so im Gefühl
MfG SideWinder
-
kann es sein, dass du dich verzählt hast?
-
Öhm eigentlich sollte mir das nicht passiert sein, aber ich zähl nochmal nach zur Sicherheit
Edit: omg stimmt, die 8 hab ich vergessen
- dann heißts weiter basteln
Edit2: Aber viel mehr ist aus meiner denkweise nicht mehr rauszuholen, muss ich also noch schauen ob mir noch ein neuer Denkansatz einfällt der nicht bereits genannt wurde.
Wenn tatsächlich 55 zu schlagen sind... *es sei denn das ist wieder bloß volkards unmögliches Ziel für Motivation*
MfG SideWinder
-
Zur Angabe noch: Die erwähnen dort so explizit die math.h - gibts da irgendwelche Funktionen die mir behilflich sein könnten?
MfG SideWinder
-
SideWinder schrieb:
Zur Angabe noch: Die erwähnen dort so explizit die math.h - gibts da irgendwelche Funktionen die mir behilflich sein könnten?
Das machen die bei jedem WPC; ich wüsste nicht, wie das speziell beim wpc111 hilfreich ist.
-
cd9000 schrieb:
SideWinder schrieb:
Zur Angabe noch: Die erwähnen dort so explizit die math.h - gibts da irgendwelche Funktionen die mir behilflich sein könnten?
Das machen die bei jedem WPC; ich wüsste nicht, wie das speziell beim wpc111 hilfreich ist.
Achso, so genau hab ich mich da nicht informiert
Also bringts wahrscheinlich nichts.
MfG SideWinder
-
das letzte mal hatte volkard gesagt, er hätte ne lösung nach wpc gepostet, hab ihn aber nicht in der liste der einsender gefunden.
-
Fragenderrr schrieb:
das letzte mal hatte volkard gesagt, er hätte ne lösung nach wpc gepostet, hab ihn aber nicht in der liste der einsender gefunden.
zu wpc108? ja, da haben die mich ignoriert. und zu wpc111 gleich auch.
-
also in der math.h ist atoi deklariert
habs bei meiner 55 token (+9 für den funktionsrumpf) abgabe benutzt, und ich habs unter die "good entries" geschafft,
also fiel es wohl nicht unter die explizit verbotenen stringfunktionendass manuel dennoch gewonnen hat, obwohl er 3 token mehr hat,
denk ich liegt daran dass er ziemlich ausführlich dokumentiert hat was er da macht
2 zeilen kommentar war wohl doch etwas wenig...
-
Gaspode schrieb:
also in der math.h ist atoi deklariert
habs bei meiner 55 token (+9 für den funktionsrumpf) abgabe benutzt, und ich habs unter die "good entries" geschafft,
also fiel es wohl nicht unter die explizit verbotenen stringfunktionendass manuel dennoch gewonnen hat, obwohl er 3 token mehr hat,
denk ich liegt daran dass er ziemlich ausführlich dokumentiert hat was er da macht
2 zeilen kommentar war wohl doch etwas wenig...Argh, hätt ich in die Richtung doch mehr nachforschen sollen :p
Gratulation trotzdem!
BTW: Hast du über die AcmeSofties den Weg zu uns gefunden? Oder warst du schon vorher Mitleser?
MfG SideWinder
-
hmm, ich denk ich hab im euirc cpp channel den link hierhin gefunden, daher kenn ich den wpc auch erst
wer da nun genau schuld ist dass ich jetzt auch hier rumhäng hab ich keine ahnung,
ich klick grundsätzlich wild auf alle links die im irc gepostet werden, firefox sei dank