** Brainfuck Interpreter Contest ** [abgeschlossen]
-
Nein aber die 2 spielt auch eine Rolle
-
Ok Du willst das nicht beantworten. Wie wärs damit. Kommen die 31 und 17 vor?
-
Ach, ich kann das schon beantworten. Es kommen keine 3 Multiplikationen vor, und bei 31 und 17 wüsste ich auch nicht wozu ich die bräuchte. Macht mich jetzt neugierig.
Aber wir sollten hier nicht allzuviel verraten - auch nicht indirekt über Fragen. Schliesslich machen auch andere noch mit, und der Contest läuft ja noch ne Woche.
-
Ist klar. Immerhin weiß ich jetzt, dass wir verschiedene Ansätze haben. Und ich befürchte gerade, Du findest raus was es mit meinen Tricks auf sich hat
-
Ich mache nicht mit, kann also ab-schreibbare Tipps geben die vielleicht allen was nützen:
Ein kleines Feature von c# sind
using
"Abkürzungen".
Also falls ihr mehr als 7 malint
verwendet, ist es kürzer Einmal am Anfang
using i=Int32;
zu schreiben und stattdessen wie beitypedef
'si
zu nehmen.
Leider geht das nicht mit primitiven Typen und der Overhead bei Byte erst nach 5 Vorkommen ausgeglichen. Je nach dem ob ihrString
oderStringbuilder
häufiger verwendet bringt es das möglicherweise was.Möge der
besserekürzesteobfuscateste Code gewinnen.
Falls ich auch nur einem geholfen habe, wars mir was Wert.
-
µ schrieb:
Ist klar. Immerhin weiß ich jetzt, dass wir verschiedene Ansätze haben. Und ich befürchte gerade, Du findest raus was es mit meinen Tricks auf sich hat
Ja, hab isch schon rausgefindet, aber mehr zufällig als sonst was.
Und ich schätze dass die Sache mit 17 und 31 dich mehr kostet als es dir bringt
Ich hab' mich auch schon mehr als 1x über meine eigenen Vorgaben geärgert.Andrerseits macht es die Sache wieder interessant wenn gewisse Abkürzungen nicht möglich sind, bzw. nur mit zu hohen Kosten.
EDIT: ne, muss mich korrigieren, das was ich dachte kanns kaum sein. Egal, sehen wir dann ja in ein paar Tagen. /EDIT
-
Rhombicosidodecahedron schrieb:
Ein kleines Feature von c# sind
using
"Abkürzungen".
Also falls ihr mehr als 7 malint
verwendet, ist es kürzer Einmal am Anfang
using i=Int32;
zu schreiben und stattdessen wie beitypedef
'si
zu nehmen.Interessant, wenn auch für diesen Contest unbrauchbar.
Es muss nämlichusing i=System.Int32;
heissen -using System;
ist nicht "vorgegeben" oder "gratis"Je nach dem ob ihr
String
oderStringbuilder
häufiger verwendet bringt es das möglicherweise was.Ich bezweifle stark dass jmd. so viele Zeichen zu verschenken hat
Trotzdem danke für den Tip, denn dieses Feature ist mir neu, und vielleicht finde ich ja mal Verwendung dafür - auch wenn ich kaum zum C# Programmieren komme.
-
using M=System.Math war für die Sign-Funktion verlockend. Hat sich aber nicht rentiert. Nix aus dem Framework bringt mir was.
Was manche Leute so als quick&dirty bezeichnen: http://stackoverflow.com/questions/3198615/wrote-a-quick-and-dirty-brainfuck-interpreter-what-could-i-do-better
-
hustbaer schrieb:
@GPC
ÖhDann kann ich Klasse ja gleich zu einer normalen Klasse machen, und gut is.
Der Grund warum das Ding überhaupt ein Generic ist, ist, damit man ggf. mehrere verschiedene Implementierungen in einem Aufwaschen damit testen kann.Geht das nicht auch anders? Muss ja irgendwie.
Ich hatte erst einfach ein "dynamic" drinnen, bloss das frisst ideone.com wieder nicht, weil man dafür irgendwelche zusätzlichen Assemblies referenzieren müsste.
Ja, stimmt, normale Klasse hätt auch gereicht..
Unabhängig davon wundert es mich aber auch, dass das per Reflection nicht gefressen wird. Eventuell gibt's ja eine Überladung der Invoke-Methode, die da was ermöglicht. Ich werd das aber erst am Montag im Geschäft prüfen, da das WE bei mir code-freie Zone ist
-
Rhombicosidodecahedron schrieb:
Also falls ihr mehr als 7 mal
int
verwendet, ist es kürzer Einmal am Anfang
using i=Int32;
zu schreiben und stattdessen wie beitypedef
'si
zu nehmen.Man schreibt genau 2 mal
int
. Oder macht das jemand anders?
-
Zweimal, ja
-
Ich komme an euch leider auch nicht so wirklich ran. Schließlich liege ich bei 366 Zeichen. Und ihr habt auch die gesamte Klasse gezählt? Na ja, vielleicht fällt mir ja noch was ein.
-
Ja, alles: class I {...}
Und using-Direktiven davor, falls benötigt.Schau Dir mal eine Referenz der C# Schlüsselwörter und Operatoren an. Das hilft um auf gute Ideen zu kommen. Auch die Operatorpräzedenzen. Zum Beispiel sind (x+y)/2 und x+y>>1 gleich. Letzteres hat aber ein Zeichen weniger.
-
UPDATE
Änderungen/Klarstellungen zu den Regeln:
- Die Funktion "R" darf nun offiziell weitere optionale Parameter haben. Beim Aufruf werden die Default-Werte für diese Parameter übergeben.
- Der Interpreter muss eine Schleifen-Verschachtelungstiefe von min. 1024 unterstützen.
Und es gibt ein neues Testsystem:
http://www.c-plusplus.net/forum/p2113680#2113680
Der fehlerhafte CellValues4 Test wurde korrigiert.
Eine Klasse "VerifyingInterpreter" ist dazugekommen, die als Interpreter funktioniert, und während der Ausführung des Programms überprüft, ob das Programm nicht etwas macht was als "UB" definiert wurde.
Und das neue Testsystem kann nun Interpreter mit optionalen Parametern aufrufen.
-
100 Daumen hoch dafür
Würde es gerne testen und einen neuen Interpreter umsetzen, aber ich kämpfe mit meinem neuen PC und bin frustriert. Siehe Technik-Forum.
-
Noch ein Test, der gezielt auf einen bestimmten Programmierfehler prüft.
RunTest("strosoki", "+>+>[<].<.", "", "\x0\x1");
-
µ schrieb:
100 Daumen hoch dafür
Dem schließe ich mich an. Echt top was du an Zeit und Aufwand in das Test-System steckst
-
Ja, wirklich sehr schön
Mein Interpreter schafft auch alle Tests, aber die Codelänge ist leider noch immer nicht konkurrenzfähig
-
All 40 tests passed. (Neues Testsystem) Aber noch 290 Zeichen mit meiner rekursiven Lösung...
-
Hmm. Wenn man den Stack simuliert, z.B. am Ende des verlängerten Bandes anhängt, kommt man auch kaum unter 260.