** Brainfuck Interpreter Contest ** [abgeschlossen]



  • Ok. Hätte mich auch gewundert.

    Lambdas dürfen nicht rekursiv sein 👎



  • PM ist angekommen, oder?



  • Die mit den Tricks. Darauf habe ich geantwortet.
    Sonst keine.


  • Administrator

    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.

    Es ist unglaublich, was für hässlichen aber funktionierenden Code man sogar in C# schreiben kann 😃

    Grüssli



  • µ 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 hat 🙂 I 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.

    ++++[>+++++<-]>[<+++++>-]+<+[
    >[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+
    >>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]
    <<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
    

  • Administrator

    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 🤡


Anmelden zum Antworten