1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[QUIZ#3] BrainScript

Dieses Thema im Forum "Archiv" wurde erstellt von Matthias Reitinger, 2. Oktober 2008.

  1. Matthias Reitinger

    Matthias Reitinger ɐɯıǝɹ Premium-User

    Quiz #3
    BrainScript

    Regeln
    Die Regeln und der Ablauf der Quizrunde können in der entsprechenden Ankündigung eingesehen werden. Bitte lest sie euch aufmerksam durch, da sie alle wichtigen Informationen enthält. Lösungsansätze können und dürfen auch schon vorab untereinander ausgetauscht und diskutiert werden, allerdings nicht öffentlich im Forum. Verwendet stattdessen bitte private Nachrichten oder schaut im Chat vorbei.

    Abgabe
    Die Abgabe erfolgt wie immer im Abgabeforum. Abgabefrist ist Sonntag, der 5. Oktober 2008 um ca. 21 Uhr.

    Das Problem
    Der Suchmaschinenbetreiber Hupf werkelt weiter an seinem revolutionären Browser. Als spezielles Feature soll neben JavaScript auch die Skriptsprache BrainScript angeboten werden. Als inzwischen erfahrener Prototyp-Programmierer ist es nun deine Aufgabe, einen Interpreter für BrainScript zu schreiben.

    Die Syntax und Semantik von BrainScript wurde 1:1 von Brainfuck übernommen. Die "virtuelle Maschine", die der Interpreter simuliert, besteht also aus einer Anzahl linear angeordeter Speicherzellen, die jeweils genau ein (vorzeichenloses) Byte speichern können. Zusätzlich besitzt die Maschine einen Zeiger, der auf die momentan aktive Speicherzelle zeigt. Anfangs zeigt dieser auf die niedrigste (erste) Speicherzelle. Die Zellen selbst sind ursprünglich alle mit dem Wert 0 vorbelegt. BrainScript unterstützt lediglich acht verschiedene Befehle, die durch jeweils ein einzelnes Zeichen repräsentiert werden:
    • + - inkrementiert den Wert der aktiven Zelle
    • - - dekrementiert den Wert der aktiven Zelle
    • > - inkrementiert den Zeiger (die nachfolgende Zelle wird aktiv)
    • < - dekrementiert den Zeiger (die vorhergehende Zelle wird aktiv)
    • . - gibt den Wert der aktuellen Zelle aus (als ASCII-Zeichen)
    • , - liest ein Zeichen ein und speichert den ASCII-Wert in der aktiven Zelle (0 falls das Ende der Eingabe erreicht wurde)
    • [ - springt vor zum dazugehörigen ], falls der Wert der aktiven Zelle 0 ist (ansonsten tue nichts)
    • ] - springt zurück zum dazugehörigen [
    Die letzten beiden Sprungbefehle können dabei beliebig tief "geschachtelt" werden. Alle anderen Zeichen im Programmtext werden vom Interpreter ignoriert (können also z.B. zur Kommentierung verwendet werden).

    Die Anzahl der Speicherzellen soll (klassischerweise) 30.000 betragen. Die Werte in den Zellen sollen das übliche Überlaufverhalten aufzeigen (inkrementieren von 255 ergibt 0, dekrementieren von 0 ergibt 255). Was bei einem Über-/Unterlauf des Zeigers passiert, bleibt euch überlassen.

    Erweiterung
    Erweitert den Interpreter dahingehend, dass die Zellenanzahl nicht mehr fix ist. Erlaubt die Angabe der Anzahl durch den Benutzer (z.B. über einen Kommandozeilenparameter) und/oder die Möglichkeit eines "unendlich" großen Speichers.

    Beispiele
    Programm:
    Code (Text):
    1. ,[.,]
    Eingabe:
    Code (Text):
    1. BrainScript
    Ausgabe:
    Code (Text):
    1. BrainScript

    Programm:
    Code (Text):
    1. ,[>,]<[.<]
    Eingabe:
    Code (Text):
    1. BrainScript
    Ausgabe:
    Code (Text):
    1. tpircSniarB

    Programm:
    Code (Text):
    1. [ This program prints Sierpinski triangle on 80-column display. ]
    2.                                 >    
    3.                                + +    
    4.                               +   +    
    5.                              [ < + +    
    6.                             +       +    
    7.                            + +     + +    
    8.                           >   -   ]   >    
    9.                          + + + + + + + +    
    10.                         [               >    
    11.                        + +             + +    
    12.                       <   -           ]   >    
    13.                      > + + >         > > + >    
    14.                     >       >       +       <    
    15.                    < <     < <     < <     < <    
    16.                   <   [   -   [   -   >   +   <    
    17.                  ] > [ - < + > > > . < < ] > > >    
    18.                 [                               [    
    19.                - >                             + +    
    20.               +   +                           +   +    
    21.              + + [ >                         + + + +    
    22.             <       -                       ]       >    
    23.            . <     < [                     - >     + <    
    24.           ]   +   >   [                   -   >   +   +    
    25.          + + + + + + + +                 < < + > ] > . [    
    26.         -               ]               >               ]    
    27.        ] +             < <             < [             - [    
    28.       -   >           +   <           ]   +           >   [    
    29.      - < + >         > > - [         - > + <         ] + + >    
    30.     [       -       <       -       >       ]       <       <    
    31.    < ]     < <     < <     ] +     + +     + +     + +     + +    
    32.   +   .   +   +   +   .   [   -   ]   <   ]   +   +   +   +   +    
    33.  * * * * * M a d e * B y : * N Y Y R I K K I * 2 0 0 2 * * * * *  
    Eingabe: irrelevant
    Ausgabe:
    Code (Text):
    1.                                 *    
    2.                                * *    
    3.                               *   *    
    4.                              * * * *    
    5.                             *       *    
    6.                            * *     * *    
    7.                           *   *   *   *    
    8.                          * * * * * * * *    
    9.                         *               *    
    10.                        * *             * *    
    11.                       *   *           *   *    
    12.                      * * * *         * * * *    
    13.                     *       *       *       *    
    14.                    * *     * *     * *     * *    
    15.                   *   *   *   *   *   *   *   *    
    16.                  * * * * * * * * * * * * * * * *    
    17.                 *                               *    
    18.                * *                             * *    
    19.               *   *                           *   *    
    20.              * * * *                         * * * *    
    21.             *       *                       *       *    
    22.            * *     * *                     * *     * *    
    23.           *   *   *   *                   *   *   *   *    
    24.          * * * * * * * *                 * * * * * * * *    
    25.         *               *               *               *    
    26.        * *             * *             * *             * *    
    27.       *   *           *   *           *   *           *   *    
    28.      * * * *         * * * *         * * * *         * * * *    
    29.     *       *       *       *       *       *       *       *    
    30.    * *     * *     * *     * *     * *     * *     * *     * *    
    31.   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *    
    32.  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *    

    Weitere Beispiele lassen sich leicht mit der Suchmaschine deines Vertrauens aufspüren.
     
    Zuletzt bearbeitet: 2. Oktober 2008
  2. kuddeldaddeldu

    kuddeldaddeldu Erfahrenes Mitglied

    Das wird den Ollie aber freuen... :D
     
  3. Alexander Schuc

    Alexander Schuc admin | crazy-weasel Moderator

    Übrigens.. im Chat gibts den Channel #coding welcher gerne dafür benutzt werden kann. :)

    Viel Spass allen.. =)
     
  4. Spyke

    Spyke Capoeirista

    Ich hab damals schon Brainfuck nicht verstanden :rolleyes:
    Aber ma schaun vielleicht krieg ich ja irgendwas hin.

    Das größte Problem ist aber eigentlich, so wirklich versteh ich die Zeiger nicht.
     
  5. Matthias Reitinger

    Matthias Reitinger ɐɯıǝɹ Premium-User

    Lass dich nicht von dem Begriff "Zeiger" abschrecken. In diesem Fall ist das nichts anderes als eine Variable, die die Nummer der aktiven Zelle speichert.
     
  6. Spyke

    Spyke Capoeirista

    Für mich kommt es so vor als wenn
    + und > inkrement
    - und < dekrement
    stehen

    Und unter dem Begriff Zelle muss ich immer zu erst an eine Zelle aus einer Tabelle denken.

    Ich hoffe mal mir fehlt jetzt hier nicht allgemein Basiswissen denn bisher kam ich eigentlich immer klar :suspekt:

    Edit:
    Es ist spät vielleicht kapier ichs morgen besser aber ich denke das hier
    http://de.wikipedia.org/wiki/Turingmaschine#Informelle_Beschreibung
    erklärt ungefähr wie das mit den Zellen gemeint ist.
     
    Zuletzt bearbeitet: 2. Oktober 2008
  7. OnlyFoo

    OnlyFoo Erfahrenes Mitglied

    *Augenbraunwackel*
    Muss mir nur noch ne Sprache aussuchen... ich hab mal einen in SparcAssembler geschrieben *erinner*

    Ich hab jetzt tatsächlich die ganz Nacht durchgearbeitet... wollte eigentlich lernen... -.- ärgerlich.
     
    Zuletzt bearbeitet: 3. Oktober 2008
  8. Spyke

    Spyke Capoeirista

    theoretisch scheint alles zu funktionieren ich hab blos ein Problem.
    Ich bekomme irgendwie die verdammte Abbruchbedingung für den Block nicht hin.

    Im Prinzip dachte ich mir sowas:
    Code (C#):
    1. while (band[position] != 0)
    Nur das funktioniert so halt nicht.

    Kann mich irgendwer auf den richtigen Weg stupsen.
     
    Zuletzt von einem Moderator bearbeitet: 23. Mai 2014
  9. Spyke

    Spyke Capoeirista

    ok Hauptproblem war ich hatte ausversehen mein Zeiger Ermittlungsquelltext gelöscht (und nicht gemerkt) :rolleyes:
     
  10. OnlyFoo

    OnlyFoo Erfahrenes Mitglied

    Meine Lösung ist fertig und eingesand, ich hab ausgeschlfen... jit-compiling rulz... nun kann ich endlich weiter lernen...
    Ich mag das Quiz, es gibt enem immer Ideen, wenn man sonnst nicht wieß, was man machen soll...
     
  11. Spyke

    Spyke Capoeirista

  12. OnlyFoo

    OnlyFoo Erfahrenes Mitglied

    Funktioniert bei mir super... aber leider kann ich keine Textadventures =)
     
  13. Spyke

    Spyke Capoeirista

    Bei mir nicht, irgendwas hab ich versemmelt.

    Edit:
    Nu kann ers auch.
    P.S.: Könnte einer der Mods (falls einer Zugriffsrechte hat) die veralteten Dateianhänge entfernen?
     
    Zuletzt bearbeitet: 3. Oktober 2008
  14. OnlyFoo

    OnlyFoo Erfahrenes Mitglied

    72h sind rum... *wart*
     
  15. Spyke

    Spyke Capoeirista

    sinds nicht erst 48 :suspekt:
     
  16. Alexander Schuc

    Alexander Schuc admin | crazy-weasel Moderator

    Erm japp. Es geht bis Sonntag.

    Donnerstag auf Freitag: 24h
    Freitag auf Samstag: 48h
    Samstag auf Sonntag: 72h

    ;)
     
  17. OnlyFoo

    OnlyFoo Erfahrenes Mitglied

    Verdammt! Boa ich bin so durch den Wind in den letzten Tagen. Jegliches Zeitgefühl so ist ohnehin komplett kaput... =) Nungut, dann noch 24h... (knapp 23, ok)

    Edit: Netiquette, *brav sei*
     
    Zuletzt bearbeitet: 4. Oktober 2008
  18. Alexander Schuc

    Alexander Schuc admin | crazy-weasel Moderator

    Knapp 23. ;)

    Bitte trotz des "durch den Wind"-seins an die Netiquette halten. ;) (Groß-/Kleinschreibung) ^^
     

Diese Seite empfehlen