** Brainfuck Interpreter Contest ** [abgeschlossen]



  • 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, 356 345.. fail... ich muss mir was schlaueres für die Schleifen überlegen.



  • 243



  • Ne Frage zum Primzahlenprogramm:
    Wenn vom Simulationsystem die 1 beim Aufruf von Primes1 eingelesen wird, dann wird ja 49 zurückgegeben. Muss ich mich jetzt drum kümmern, das daraus ne 1 wird!? Oder ist das Aufgabe des Brainfuck-Programs?



  • Du musst dich um garnichts kümmern.



  • µ schrieb:

    P.S. Nur um sicher zu gehen. Du entfernst keine Leerzeichen, die für eine korrekte Syntax notwendig sind, oder?

    Nein, natürlich nicht.
    Und du deprimierst mich hier gerade...



  • KasF schrieb:

    Ne Frage zum Primzahlenprogramm:
    Wenn vom Simulationsystem die 1 beim Aufruf von Primes1 eingelesen wird, dann wird ja 49 zurückgegeben. Muss ich mich jetzt drum kümmern, das daraus ne 1 wird!?

    Darum kümmert sich die Konsole.

    EDIT: Ich Koffer 🙂 Hatte die Frage falsch verstanden.

    Ja, wie du schon als 2. Option vorgeschlagen hast: das ist die Aufgabe des Brainfuck-Programms. Das setzt natürlich voraus, dass das Brainfuck-Programm und "die Implementierung" sich einig über den verwendeten Zeichensatz sind. Ist aber für die meisten Programme kein Thema, da man sich einfach auf die Zeichen <= 127 beschränkt, die fast überall gleich sind.

    Du bekommst auf jeden Fall von der Funktion S.R() "passende" Werte zurück, die du so direkt in den "Band" reinschreiben kannst. Es muss nix umgerechnet/angepasst/... werden.

    Bei der Ausgabe dann genau so: du rufst einfach S.W() auf, mit dem Wert der gerade auf "dem Band" steht. Ohne irgendwas umzurechnen.

    ----

    Das "Primes" Programm macht das auch ganz korrekt, also den Textuellen Input in eine Zahl umzurechnen.
    Bloss eins muss dabei passen: die Eingabe muss mit "\n" abgeschlossen werden, und NICHT mit dem Windows-typischen "\r\n". Das Test-Programm übergibt bei den automatisierten Tests sowieso passende Strings, und die ebenfalls enthaltene Klasse "InteractiveSystem" "filtert" die "\r" raus, damit man auch unter Windows interaktive Tests machen kann (wenn man das möchte).

    /EDIT



  • hustbaer schrieb:

    Und du deprimierst mich hier gerade...

    Das macht es spannend. Aber wage es nicht mit <=242 anzurücken. 😃



  • Mal sehen...



  • µ schrieb:

    243

    Ja, auch.
    Lustigerweise mit zwei ganz verschiedenen Ansätzen.



  • Ich musste eins meiner liebsten Babys opfern 😞 - aber was solls, geht nich anders.
    Dafür ist ein neues Baby hinzugekommen, das zwar nicht so kuhl, dafür aber richtig dreckig ist 🤡
    (Bzw. sogar 2, aber eins davon ist kaum der Rede wert)

    Interpreter_5_1252.cs, 238 Zeichen

    SHA-256 = f642dbd4bb1478956803e2e4e2dea5487a661f0a6255039289b92b54e76d1712

    An alle die sich wundern warum ich noch mitmache: erstmal geht's ja um nix ausser der Ehre, und dann hat auch noch keiner ausser µ ganz zu Anfang was abgegeben...
    Aber wie gesagt, wer mag kann mich jederzeit ausser Konkurrenz sehen. Schätze ich werde mich mit nem .5 Rang in die Wertung einschummeln 😃
    (Im Moment wäre das Platz 0.5, also los, strengt euch an!)



  • Nochwas, Leute...
    Hat keiner Lust uns ein paar weitere Test-Cases zu ergoogeln?

    Irgendwie hab' ich ja im Moment nur einen "echten" Test-Case, das "Primes" Programm. Das ist zwar ordentlich gross, aber ich fände es besser wenn wir mehr hätten.

    Und wenn's nur deswegen ist, weil es lustiger anzusehen ist je mehr ganz verschiedene Test-Cases durchgemacht werden.



  • 1. Du kannst ja das Programm mit den Quadratzahlen noch als Testcase nehmen. Bei Gelegenheit werde ich mal nach weiteren suchen.

    2. Du frustrierst mich nun zum dritten mal.



  • hustbaer schrieb:

    und dann hat auch noch keiner ausser µ ganz zu Anfang was abgegeben...

    Der Vorteil von "jeder sagt im Thread was er grad hat" ist die zusätzliche Motivation, aber ich für meinen Teil werd meine Lösung z.B. nicht abgeben, weil ich ca. 100 Zeichen mehr als ihr (Pisser! ;D) hab und es deswegen auch keinen Sinn macht 😉


Anmelden zum Antworten