** Brainfuck Interpreter Contest ** [abgeschlossen]
-
µ schrieb:
Die mit den Tricks. Darauf habe ich geantwortet.
Sonst keine.Ja, die. Sorry, Antwort hatte ich noch nicht gesehen.
-
Dravere schrieb:
Ich habe nachwievor eine Idee mit unsafe, bisher aber gewartet, bis es erlaubt wird. Wenn ich dann mal genügend Zeit finde, werde ich der Idee nachgehen.
Ich glaube nach wie vor dass es nix bringen wird, aber vielleicht täusche ich mich ja.
Es ist unglaublich, was für hässlichen aber funktionierenden Code man sogar in C# schreiben kann
Hihi, ja.
Das wahre Ausmass werden wir vermutlich aber erst sehen, wenn die Ergebnisse veröffentlicht werden
-
Hätte auch nicht gedacht, dass ich ma bool <-> int casts, Komma-Operator und richtigen Präprozessor vermisse
-
µ schrieb:
Lambdas dürfen nicht rekursiv sein
Man kann es ein bisschen hinfaken:
Func<long, long> faculty = null; faculty = (n) => n == 1 ? 1 : n * faculty(n - 1);
Es geht auch mit echter Rekursion (und viel Schreibaufwand, daher gerade hier unpraktikabel): http://blogs.msdn.com/b/wesdyer/archive/2007/02/02/anonymous-recursion-in-c.aspx
-
Ich bin bei 253 Zeichen, aber bei den Primzahlen verursache ich 'ne Endlosschleife/o\ (crappy doppelt verschachtelte bf-schleifen)
Ist hinfällig, da der Makrocode falsch gezählt hatI don't like mondays.
Edit:
Btw, wer's noch nicht hat: Ein Makro um die Anzahl zeichen in VS zu bestimmen:Option Strict Off Option Explicit Off Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports EnvDTE90a Imports EnvDTE100 Imports System.Diagnostics Public Module CountNonWhiteSpaceCharacters Sub Count() Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection() Dim text As String = selection.Text text = text.Replace(" ", "") text = text.Replace(vbCrLf, "") text = text.Replace(vbTab, "") MsgBox("Count " + text.Length.ToString()) End Sub End Module
-
Bin bei 250
-
@GPC
Das Makro killt aber notwendige Leerzeichen. int i = 0 wird zu inti=0;
-
µ schrieb:
@GPC
Das Makro killt aber notwendige Leerzeichen. int i = 0 wird zu inti=0;Stimmt, das ist doof. Na ja, das kann man ja leicht anpassen
-
248
-
Test für verschachtelte Schleifen. Quadratzahlen bis 10k. Irgendwo gefunden.
++++[>+++++<-]>[<+++++>-]+<+[ >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+ >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<] <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
-
GPC schrieb:
µ schrieb:
@GPC
Das Makro killt aber notwendige Leerzeichen. int i = 0 wird zu inti=0;Stimmt, das ist doof. Na ja, das kann man ja leicht anpassen
Ich habe mir kurz ein hässliches Hilfswerkzeug mit dem Namen Stomp in C# geschrieben.
Hier der hässliche Algorithmus zum verkleinern:string Stomp(string text) { var regex = new Regex(@"\s+"); text = regex.Replace(text, " "); text = text.Replace("\r\n", " "); text = text.Replace('\n', ' '); for(int i = 0; i < text.Length; ++i) { if(text[i] == ' ' && ((i > 0 && !Char.IsLetter(text[i - 1])) || (i < (text.Length - 1) && !Char.IsLetter(text[i + 1])))) { text = text.Remove(i, 1); --i; } } return text; }
Funktioniert erstaunlich gut
Grüssli
-
hustbaer schrieb:
Es sollen Brainfuck-Interpreter verglichen werden, und nicht nach Wegen gesucht werden wie man das Testsystem bescheissen kann. Beiträge die versuchen das Testsystem über z.B. Reflection zu bescheissen werden disqualifiziert.
(Ich könnte natürlich stattdessen das Testsystem soweit absichern dass es nicht mehr möglich ist zu bescheissen, aber das ist mir ehrlich gesagt zu viel Aufwand.)
-
µ schrieb:
Ich stehe noch bei 267.
Ich hab's auch mal probiert. Ich stehe bei 462.
-
Nich all zu hübsch, und deckt sicher ein paar Spezialfälle nicht ab, aber funktioniert OK.
(z.B. den "Spezielfall" Kommentare :D)Option Strict On Option Explicit On Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports EnvDTE90a Imports EnvDTE100 Imports System.Diagnostics Imports System.Text.RegularExpressions Public Module BrainfuckContest Public Function FindOutputWindowPane(ByVal paneName As String) As OutputWindowPane FindOutputWindowPane = Nothing Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) Dim ow As OutputWindow = CType(win.Object, OutputWindow) For Each owPane As OutputWindowPane In ow.OutputWindowPanes If owPane.Name.Equals(paneName) Then FindOutputWindowPane = owPane Exit For End If Next End Function Public Sub WriteToOutputWindow(ByVal paneName As String, ByVal message As String) Dim owPane As OutputWindowPane = FindOutputWindowPane(paneName) If owPane Is Nothing Then Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput) Dim ow As OutputWindow = CType(win.Object, OutputWindow) owPane = ow.OutputWindowPanes.Add(paneName) End If owPane.Activate() owPane.OutputString(message + vbCrLf) End Sub Public Function Stomp(ByVal text As String) As String Dim regex As Regex = New Regex("\s+") text = regex.Replace(text, " ") text = text.Trim() text = "+" + text + "+" Dim i As Integer = 1 While i < (text.Length - 1) Dim remove As Boolean = False If Char.IsWhiteSpace(text(i)) Then If Not Char.IsLetterOrDigit(text(i - 1)) Or Not Char.IsLetterOrDigit(text(i + 1)) Then remove = True End If End If If remove Then text = text.Remove(i, 1) Else i = i + 1 End If End While text = text.Substring(1, text.Length - 2) Stomp = text End Function Public Sub InofficialCount() Dim selection As EnvDTE.TextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection) If String.IsNullOrEmpty(selection.Text) Then selection.SelectAll() End If Dim text As String = Stomp(selection.Text) WriteToOutputWindow("Brainfuck Contest", text) WriteToOutputWindow("Brainfuck Contest", "(Length = " + text.Length.ToString() + ")" + vbCrLf) End Sub Public Sub PossiblyCorrectFormat() Dim selection As EnvDTE.TextSelection = CType(DTE.ActiveDocument.Selection, EnvDTE.TextSelection) If String.IsNullOrEmpty(selection.Text) Then selection.SelectAll() End If Dim text As String = Stomp(selection.Text) selection.Delete() selection.Insert(text) End Sub End Module
Zur Verwendung muss das VB-File in in der Macro-IDE anscheinend in "BrainfuckContest" umbenannt werden, sonst zeigt er die Funktionen nicht an. Warum auch immer.
Falls jmd. Verbesserungen hat bitte posten
-
µ schrieb:
248
Gut, 1x kann ich noch drunter.
247
-
Ach ne, sorry, doch nur 245
-
Oder doch nur...
Interpreter_4_1252.cs, 244 Zeichen:
SHA-256 = 8bcb2287ac504e8ba27ae40b1857ba5deaa7819ad7ad66b64158094279dd027d
-
hustbaer das darf ja wohl nicht wahr sein. Es hat mir körperliche Schmerzen bereitet unter 249 zu kommen und jetzt das
Holy shit. 5 weitere Zeichen einsparen
P.S. Nur um sicher zu gehen. Du entfernst keine Leerzeichen, die für eine korrekte Syntax notwendig sind, oder?
-
Fett
Ich hab jetzt meinen Bug gefixt, bin aber wieder bei
379, 368, 356345.. fail... ich muss mir was schlaueres für die Schleifen überlegen.
-
243