Zeitvertreib gesucht



  • Ich bin jetzt 27 🙂
    aber jetzt spiel ich das Patrimonium. Ist echt lustig, ausser, dass ich gleich im zweiten Screen net weiterkomm *g*



  • Kennst du Blockout ?
    http://www.blockout.de/download/blockout.exe
    3 Dimensionales Tetris



  • dEUs schrieb:

    Womit könnt ich mir denn die Zeit vertreiben?

    siehe sig 😃



  • volkard:
    Och nö! Dazu bin ich viel zu schlecht 😞



  • dEUs schrieb:

    volkard:
    Och nö! Dazu bin ich viel zu schlecht 😞

    schämste dich?
    dann nenn dich einfach TGGC und spiel mit.



  • hehe 😃
    Ich hab vor nem Jahr mal mitgemacht. Beim ersten mal war Codekürze das Hauptkriterium. Da hab ich gewonnen. Beim zweiten Mal war es Geschwindigkeit, so wie im aktuellen. Da bin ich nciht mal bis in die finale Runde gekommen ...



  • Du darfst mir mal ein Messergebnis von dir sagen und am Besten auch gleich das passende Array dazu liefern 🙂

    *g* Und vielleicht den Code zum Zeitmessen 😉



  • dEUs schrieb:

    Hi Leute,
    Ich bin krank und sitz deswegen den ganzen Tag vorm Rechner.
    Arbeiten will ich nciht, da mir das momentan zu anstrengend ist, aber zu tode langweilen will ich mich nicht. Womit könnt ich mir denn die Zeit vertreiben?

    siehe meine sig. 🙂



  • #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    int wpc107(int a[5][5]);
    
    inline int compareRowsSec(int a[5][5],int i,int j)
    {
    	return a[i][0]==a[j][0] && a[i][1]==a[j][1] && a[i][2]==a[j][2] && a[i][3]==a[j][3] && a[i][4]==a[j][4];
    }
    
    int wpc107sec(int a[5][5])
    {
    	if(compareRowsSec(a,0,1)) return true;
    	if(compareRowsSec(a,0,2)) return true;
    	if(compareRowsSec(a,0,3)) return true;
    	if(compareRowsSec(a,0,4)) return true;
    	if(compareRowsSec(a,1,2)) return true;
    	if(compareRowsSec(a,1,3)) return true;
    	if(compareRowsSec(a,1,4)) return true;
    	if(compareRowsSec(a,2,3)) return true;
    	if(compareRowsSec(a,2,4)) return true;
    	if(compareRowsSec(a,3,4)) return true;
    	return false;
    }
    
    typedef unsigned __int64 u64;
    
    #pragma warning(push)
    #pragma warning(disable:4035)
    u64 rdtsc()
    {
    	__asm rdtsc;
    }
    #pragma warning(pop)
    
    int main()
    {
    	int a[5][5];
    	for(int o=0;o<100000;++o)
    	{
    		for(int i=0;i!=5;++i)
    			for(int j=0;j!=5;++j)
    				a[i][j]=rand()%2;
    			if(wpc107(a)!=wpc107sec(a))
    			{
    				cout<<"Fehler!"<<endl;
    				return 1;
    			}
    	}
    	int left=1000;
    	u64 mintime=u64(-1);
    	int s=0;
    	while(left)
    	{
    		srand(0);
    		u64 time=0;
    		for(int o=0;o<10000;++o)
    		{
    			for(int i=0;i!=5;++i)
    				for(int j=0;j!=5;++j)
    					a[i][j]=rand()%2;
    			time-=rdtsc();
    			s+=wpc107(a);
    			time+=rdtsc();
    		}
    		if(time<mintime)
    		{
    			mintime=time;
    			left=1000;
    			cout<<int(mintime)<<endl;
    		}
    		--left;
    	}
    	cout<<s<<endl;
    	cout<<"speedup: "<<2260575.0/int(mintime)<<endl;
    
    	return 0;
    }
    

    das war die main.cpp. die ändert sich von aufgabe zu aufgabe kaum. ich messe immer irgendwie viele zufallswerte.
    die wpc107.cpp kriegste natürlich nicht.

    die zahl 2260575.0 in der main mußte erst noch selber bestimmen, indem du in der wpc107.cpp auch nur den code der int wpc107sec(int a[5][5]) unter dem namen int wpc107(int a[5][5]) anbietest.
    das messprogramm ist kalibriert, wenn da steht "speedup 1" oder so. wirst sehen, daß es sehr zuverlässig 4 oder mehr stellen genau mißt.
    und dann verbessere stück für stück die wpc107.

    ich bin bei speedup 1.47

    falls du mit der gcc arbeitest, sind unsre ergebnisse nicht vergleichbar, weil dein rand() andere werte liefert. dann müßten wir noch ein einheitliches rand() bauen und den kram mit rdtsc ver-ifdefen.



  • ui, cool 😃

    Also, ich arbeite mit dem VC++ 6.0 SP5
    Momentan mess ich mit QueryPerformanceCounter und komm auf ne Zeit von 0,8 - 4 ms für 10000 überprüfungen ...
    Werd mal deinen Code nehmen, damit wir besser vergleichen können.



  • Hm, was hast du denn für nen Rechner?
    Ich hab nämlich als Kalibrierungswert 8712000



  • dEUs schrieb:

    Hm, was hast du denn für nen Rechner?
    Ich hab nämlich als Kalibrierungswert 8712000

    scherzkeks. miss mal im releas-modus.
    hab nen celeron400.



  • lol ... 🙄

    Oh weh! 😮
    Im Debugmodus bin ich mit meiner Funktion noch auf 1,25 gekommen. Im Release bin ich bei 0,6 🙄



  • 0,25 :|
    Ich glaub, mir fehlen da ein paar Programmierkonzepte ...



  • hihi. sieht aus, als hättest du es auch mit memcmp() versucht.



  • jo, da war ich wenigstens noch bei 0,6 😉
    dann hab ich meine eigene routine zum vergleichen geschrieben und bin bei 0,25 gelandet.
    Hm, darf ich erfahren, ob du inline-assembler verwendest?



  • Wow, ist ein goto teuer 😮



  • 1,32 ...

    Aber fast genauso, wie wpc107sec es macht ...
    Und das bedeutet, ich bekomms nciht mehr schneller 😕



  • dEUs schrieb:

    1,32 ...

    Aber fast genauso, wie wpc107sec es macht ...
    Und das bedeutet, ich bekomms nciht mehr schneller 😕

    dann schick's ab. nen halben tag zeitvertreib hats ja gebracht.
    und dann warten wir auf nächste woche.

    meins ist übrigens auch fast genauso, wie wpc107sec es macht. da ist einfach nicht viel zu trixen, fürchte ich.



  • hm, aber du bist trotzdem noch um 0,15 schneller 🙂

    n bissle probier ich noch rum. Momentan bekomm ichs mit irgendwelchen Änderungen, die eigentlich keine Auswirkungen haben dürften, noch schneller 😕


Anmelden zum Antworten