Homepage selbermachen 7.851 Themen, 35.615 Beiträge

Lust auf kleines Spiel?

xafford / 17 Antworten / Baumansicht Nickles

Wer hätte Lust auf einen kleinen Wettbewerb? Es soll darum gehen, daß eine relativ einfache Aufgabe gestellt wird, die mittels PHP mit möglichst wenig Code und am effizientesten gelöst wird. Eine Kommentierung des Code, Fehlerbehandlung, Ausnahmefestigkeit ist egal, nur funktionieren muß er rein mit internen Sprachmitteln einer normalen PHP-Installation.

Hätte jemand Lust auf so ein Spielchen?

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
gelöscht_15325 xafford „Lust auf kleines Spiel?“
Optionen

Lust schon, nur würd ich aufgrund meiner kaum vorhandenen Kenntnisse in geschickter Programmierung wohl gnadenlos abrauchen ;-)

Im Übrigen eine gute Methode um anderen die eigene Arbeit aufzubrummen *g*

bei Antwort benachrichtigen
Der_Milchmann xafford „Lust auf kleines Spiel?“
Optionen

Lust schon, aber wenns zu doll und heftig ist, dann wirst du wohl allein bleiben :-)

sag das thema und ich bin dabei :-)

-----------------------------------Zu Hartz4 kann ich nur sagen, dass ich froh bin, dass ich einen Job habe
bei Antwort benachrichtigen
Borlander xafford „Lust auf kleines Spiel?“
Optionen

Klar - zu jeder Tages und Nachtzeit ;-) Weißt doch das ich gerne effektiven Code schreibe...

bei Antwort benachrichtigen
xafford Nachtrag zu: „Lust auf kleines Spiel?“
Optionen

Gut, 3 Mitstreiter wären also da :o)...@czuk: mist, ich bin enttarnt ;o)...nein, aber im ernst, ich denke es ist eine gute übung und man kann anhand desstils der anderen bestimmt lernen.

Nun zur Aufgabe:

Schaffen wir uns mal eine Benchmarkroutine für Mögliche weitere Wettbewerbe selbst. Es geht also darum, eine Funktion zu schreiben, welche eine andere Funktion bencht. Daraus ergeben sich folgende Anforderungen:


  • Der Name der zu prüfenden Funktion muß übergeben werden können

  • Die Anzahl der Durchläufe für den Test muß übergeben werden können

  • Die Funktionsparameter müssen übergeben werden können

  • Rückgabewert soll die durchschnittliche Laufzeit der getesteten Funktion sein


Wie schon erwähnt muß Ausnahmefestigkeit, Bereichsprüfungen oder sonstiges nicht implementiert sein, gehen wir mal davon aus, daß Überprüfungen extern gehandhabt werden. Wenn etwas schief läuft soll einfach FALSE gelifert werden.
Und jetzt mal los (gilt auch für mich, sowas hab ich nicht in meinem Fundus).
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
xafford Nachtrag zu: „Lust auf kleines Spiel?“
Optionen

PS: Man kann das natürlich auch als Klasse implementieren, nur wird dies wohl der Performance weniger zuträglich sein ;O)

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
xafford Nachtrag zu: „Lust auf kleines Spiel?“
Optionen

PPS: Was ich noch alles vergessen habe:

Als Bewertungskriterium dachte ich mir:

2* Durchschnittliche Laufzeit des langsamsten Programmes / durchschnittliche Laufzeit + Codezeilen des längsten Programmes / Codezeilen

Als Zeitrahmen dachte ich bis morgen Abend 20:00. Der gewinner darf die neue Aufgabe stellen.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Borlander xafford „Lust auf kleines Spiel?“
Optionen
Wenn etwas schief läuft soll einfach FALSE gelifert werden.
Da könnte man dann allerdings noch drüber philosophieren wann etwas schief gelaufen ist...

Ich hab meine Routine fertig - bisher ohne eine FALSE-Rückgabe im Fehlerfall...

Interessant wäre jetzt allerdings auch noch ob eine genauere Messung oder ein schlankerer Code wichtig sind.
bei Antwort benachrichtigen
xafford Borlander „Lust auf kleines Spiel?“
Optionen

Okay, Rückgabewert false kann man streichen....eine Rückgabe der Zeit oder im Fehlerfall eben gar nichts ist genau so gut denke ich.

Messen sollte die Funktion natürlich so genau, daß ein Benchmark sinnvoll ist. Ich denke um das Ganze reizvoll genug zu machen sollte man jede Funktion von sich selbst benchen lassen...hat dann jemand nur Sekunden implementiert sieht´s halt bös aus ;o)...

Meine ist auch fertig, hab sie heut am frühen Abend geschrieben, war also nichts, was ich vorher schon hatte wie schon erwähnt.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Borlander xafford „Lust auf kleines Spiel?“
Optionen
Messen sollte die Funktion natürlich so genau, daß ein Benchmark sinnvoll ist.
Das ist natürlich klar...

Ich denke um das Ganze reizvoll genug zu machen sollte man jede Funktion von sich selbst benchen lassen...
Das hatte ich schon gemacht, dann müssten wir uns aber noch auf eine Testfunktion für die innere Benchmark-function einigen...


Wie soll das dann eigentlich mit der Veröffentlichung laufen? Alle gleichezeit um 20:00? Evtl. beim Chatbesucht?
bei Antwort benachrichtigen
xafford Borlander „Lust auf kleines Spiel?“
Optionen
Das hatte ich schon gemacht, dann müssten wir uns aber noch auf eine Testfunktion für die innere Benchmark-function einigen...

Ich denke die Benchmarkfunktion ist relativ egal, da ohnehin alle mit der gleichen getestet werden. Mein Funktion habe ich bisher immer mit der exp() gestestet (also einer PHP-eigenen Funktion).

Wie soll das dann eigentlich mit der Veröffentlichung laufen? Alle gleichezeit um 20:00?

Ich denke es muß nicht Punkt 20:00 sein, aber man sollte schon einen Termin nehmen, von dem man annimmt, daß die anderen mit ihrer Funktion auch schon fertig sind. Ich nehme eh an, daß bei einer so einfachen Funktion die meisten eh sehr ähnlich sein werden.
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Borlander xafford „Lust auf kleines Spiel?“
Optionen
Mein Funktion habe ich bisher immer mit der exp() gestestet (also einer PHP-eigenen Funktion).
Gute Idee - die läuft deutlich schneller als eine leere selbst definierte Fkt. Hast Du die exp-Fkt mit konstantem oder variablem Wert aufgerufen?

Willst Du dann eigentlich alle Fkts bei Dir benchmarken lassen (mit Apache/PHP excl. auf einer CPU)? Wenn das jeder selbst macht könnten die Ergebnisse u.U. nur schwer vergleichbar sein...
bei Antwort benachrichtigen
xafford Borlander „Lust auf kleines Spiel?“
Optionen

Ich wollte alles zentral auf dem Chatserver benchen, jede Funktion auf einer eigenen Seite mit mehreren Durchläufen (so ca. 1000) und Mittelwerte bilden und das ganze dann nach der vorher schon genannten Formel gewichten nach Codezeilen und Laufzeit. Der Code soll für jeden einsehbar sein, um es transparent zu machen.

Die exp hab ich übrigens immer mit festem Wert übergeben. e10

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
T E S T E R xafford „Lust auf kleines Spiel?“
Optionen

Hallo,

will auch mitmachen, habe aber die aufgabenstellung nicht verstanden - so doof das klingt :-)

gibts das nochmal vereinfacht?

bei Antwort benachrichtigen
xafford T E S T E R „Hallo, will auch mitmachen, habe aber die aufgabenstellung nicht verstanden - so...“
Optionen

Ok, ich versuche es, falls nciht frag bitte nochmal gezielt nach.

Es geht darum eine Funktion zu schreiben, mit Hilde derer man eine beliebige andere Funktion auf Leistung testen kann. Der Name der zu prüfenden Funktion (beliebig) muß also als Argument übergeben werden, ebenso die Zahl, wie oft hintereinander die zu prüfende Funktion hintereinander ausgeführt werden soll im Test und die Argumente für die zu prüfende Funktion.

function Benchmark(string Funktionsname, int Wiederholungen, Parameter){
// Teste Funktion Funktionsname mit Parametern auf Leistung (durchschnittliche Laufzeit)
}

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
xafford Nachtrag zu: „Lust auf kleines Spiel?“
Optionen

so, ich fange mal an, da ich leider gleich weg muß, hier mein Code


function Benchmark($a){
$d=microtime();
$e=0;
while($e++<$a[1]){call_user_func_array($a[0],$a[2]);}
return (array_sum(explode(' ',microtime()))-array_sum(explode(' ',$d)))/$a[1];
}


Eingabewert ist ein Array, das folgendermaßen aussieht:

array('Name der Testfunktion','Widerholungen',array('Argumente der Funktion'))

Als Beispiel:

$dauer=Benchmark( array( 'exp' , 1000 , array( 10 ) ) );
Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Borlander xafford „so, ich fange mal an, da ich leider gleich weg muß, hier mein Code function...“
Optionen

Dann mach ich doch direkt weiter:

function Bench3($f,$n,$p) {
  list($u,$s)=explode(' ',microtime()); $t=$s+$u;       // Startzeit bestimmen
  for($i=0; $i++<$n; call_user_func_array($f,$p));       // f n mal ausführen
  list($u,$s)=explode(' ',microtime()); return ($s+$u-$t)/$n;       // Zeitdiffernz bestimmen
}
bei Antwort benachrichtigen
xafford Nachtrag zu: „Lust auf kleines Spiel?“
Optionen

Leider nur 2 Teilnehmer, schade...aber für alle interessierten hier die Ergebnisse:

Ergebnisse

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen