** Brainfuck Interpreter Contest ** [abgeschlossen]



  • Ich hab meine finale Version jetzt per e-mail abgegeben 🙂



  • Vergesst nicht auf's Abgeben!

    Per Email oder Forenmail, was euch lieber ist.

    Wer sich drauf verlassen mag, dass ihm niemand schnell noch was abguckt, kann natürlich auch gerne kurz vor Ende des Contest hier im Forum posten. (Mit "kurz vor" meine ich so maximal 2-3 Minuten)



  • GPC schrieb:

    Ich hab meine finale Version jetzt per e-mail abgegeben 🙂

    Ah, sehr cool.
    Aber bist du sicher dass du da nix mehr verkürzen kannst/willst? 😉



  • Können ja, aber wollen eig. nicht 😉



  • @hustbaer
    Wieviel Zeichen benötigst Du für die Behandlung von +, -, >, < und , ?



  • @GPC:
    Denk' ich mir 🙂
    (Also dass du könntest, wieso du nicht willst weiss ich nicht)

    Würde mich nicht wundern, wenn ich deinen Code mit "meinen" Tricks sogar unter meine 219 bringe 🕶
    Muss ich heute Abend mal probieren.

    ----


    Uff.

    Das kann man so nicht sagen, das ist alles etwas ineinander verwachsen.
    Hab den Code auch grad nicht zur Hand.
    Ich kann aber heute später nachgucken ob ich da eine sinnvolle Zahl ermitteln kann.



  • Du hast Post. Ich habe vorhin noch etwas probiert aber ohne Erfolg.



  • hustbaer schrieb:

    @GPC:
    Denk' ich mir 🙂
    (Also dass du könntest, wieso du nicht willst weiss ich nicht)

    WE ist code-freie Zone 😉 Ne, im Ernst.. ich hab außerhalb der Arbeitszeiten zu viel um die Ohren, als das ich für den BF-Interpreter noch groß Motivation hätte.

    Würde mich nicht wundern, wenn ich deinen Code mit "meinen" Tricks sogar unter meine 219 bringe 🕶
    Muss ich heute Abend mal probieren.

    Würd mich auch interessieren, 👍



  • Bisschen früh aber ich bin ja nun raus: Gratulation an Hustbaer, war zeitweise ein spannendes Rennen 🙂

    Jederzeit gerne wieder ein Contest. Aufgaben bei denen man schrittweise optimieren kann haben ihren Reiz 👍



  • hustbaer schrieb:

    @GPC:
    (...)
    Würde mich nicht wundern, wenn ich deinen Code mit "meinen" Tricks sogar unter meine 219 bringe 🕶

    Hihi. Nö, komm nichtmal in die Nähe. Es geht zwar noch einiges, aber nicht genug 🙂



  • Uff.
    Hab grad meinen Code "kommentiert". Gar nicht so einfach das so zu erklären dass man es verstehen kann ohne allzuviel zu grübeln...
    169 Zeilen mit Kommentaren.

    (Witzigerweise ist mir dabei noch ein "verschenktes" Zeichen aufgefallen, also meine beste Version liegt jetzt bei 218, hihi)



  • Ich hab meine Variante auch abgegeben. Ist zwar nicht konkurrenzfähig, aber vielleicht lässt sich ja doch eine Erkenntnis daraus gewinnen. Insofern wäre es wohl schön, wenn jeder der was gebastelt hat, dies auch an hustbaer schickt. 🙂

    Edit: Vielleicht könnten wir ja noch ein kleinen Benchmark einbauen. Es wäre später interessant zu sehen, inwiefern die Ausführungszeiten bei den Codes von dessen Länge abhängig sind.



  • Loslos, will Code sehen. 😃



  • Naja, det dauert noch ein paar Stunden...

    Nicht dass sich nochwas tun würde bis dahin, aber ich hab Samstag 23:59 geschrieben, daran halte ich mich jetzt auch 🙂



  • *hust* *drängel*



  • Sorry, bin grad erst ausm Kino zurückgekommen. Ich muss die Interpreter noch testen und das Ergebnis zusammenschreiben - dauert noch etwas.



  • So. Viele haben nicht eingereicht, aber egal. Hier das

    Ergebnis

    1. µ - 228

    2. KasF - 255

    3. Bashar - 260

    4. Dummie - 264

    5. GPC - 276

    6. hustbaer - 254 bzw. 218

    Die Sourcen folgen sogleich...



    1. µ - 228
    class I{public void R(S S){var b=new int[1<<16];for(int p=0,i=0,w=0,n=0,j;i<S.P.Length;i+=w<0?-1:1)if(0==(w+=(j=92-S.P[i])*j==1?j+(w==0?n!=0?-1:1:j):0)){if(j==46)S.W(n);n=b[p-=(j-=31)*j==1?j:0]+=(j-=17)*j==1?j:j==0?S.R()-n:0;}}}
    
    class I_Nice
    {
    	public void R(S S)
    	{
    		var b = new int[1 << 16];
    		for (int p = 0, i = 0, w = 0, n = 0, j; i < S.P.Length; i += w < 0 ? -1 : 1)
    			if (0 == (w += (j = 92 - S.P[i]) * j == 1 ? j + (w == 0 ? n != 0 ? -1 : 1 : j) : 0))
    			{
    				if (j == 46)
    					S.W(n);
    				n = b[p -= (j -= 31) * j == 1 ? j : 0] += (j -= 17) * j == 1 ? j : j == 0 ? S.R() - n : 0;
    			}
    	}
    }
    

    µ hat keine Erklärung dazugeschrieben. Ich müsste den Code auch selbst erst auseinandernehmen, aber das Grundprinzip kommt mir sehr bekannt vor 🙂
    Im Prinzip fast das selbe wie mein Code, nur fehlen ein paar Tricks.



    1. KasF - 255
    class I{public void R(S q){int[]b=new int[1<<16];int z=0,i=0,s=0,a;while(i<q.P.Length){a=q.P[i]-40;s+=a==51&&(b[z]==0||s!=0)?1:a==53&&(b[z]|s)!=0?-1:0;if(s==0){b[z]+=a==3?1:a==5?-1:a==4?q.R()-b[z]:0;z+=a==22?1:a==20?-1:0;if(a==6)q.W(b[z]);}i+=s<0?-1:1;}}}
    
    class I_Nice
    {
    	public void R(S q)
    	{
    		int[] b = new int[1 << 16];
    		int z = 0, i = 0, s = 0, a;
    
    		while (i < q.P.Length)
    		{
    			a = q.P[i] - 40;
    
    			s += a == 51 && (b[z] == 0 || s != 0) ? 1 : a == 53 && (b[z] | s) != 0 ? -1 : 0;
    
    			if (s == 0)
    			{
    				b[z] += a == 3 ? 1 : a == 5 ? -1 : a == 4 ? q.R() - b[z] : 0;
    				z += a == 22 ? 1 : a == 20 ? -1 : 0;
    
    				if (a == 6) q.W(b[z]);
    			}
    
    			i += s < 0 ? -1 : 1;
    		}
    	}
    }
    

    KasF hat keine Erklärung dazugeschrieben. Ist aber auch eine "klassische" (hihi) 1-Schleifen-Lösung.



  • Gerade nach Hause gekommen. Schön, die Codes treffen ein 🙂

    Falls Erklärung erwünscht, schreibe ich morgen gerne was dazu.
    Und auf die Tricks auf die ich nicht gekommen bin, bin ich natürlich am meisten gespannt 😉


Anmelden zum Antworten