Matthias Reitinger
ɐɯıǝɹ
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:
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:
Eingabe:
Ausgabe:
Programm:
Eingabe:
Ausgabe:
Programm:
Eingabe: irrelevant
Ausgabe:
Weitere Beispiele lassen sich leicht mit der Suchmaschine deines Vertrauens aufspüren.
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 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:
,[.,]
Code:
BrainScript
Code:
BrainScript
Programm:
Code:
,[>,]<[.<]
Code:
BrainScript
Code:
tpircSniarB
Programm:
Code:
[ This program prints Sierpinski triangle on 80-column display. ]
>
+ +
+ +
[ < + +
+ +
+ + + +
> - ] >
+ + + + + + + +
[ >
+ + + +
< - ] >
> + + > > > + >
> > + <
< < < < < < < <
< [ - [ - > + <
] > [ - < + > > > . < < ] > > >
[ [
- > + +
+ + + +
+ + [ > + + + +
< - ] >
. < < [ - > + <
] + > [ - > + +
+ + + + + + + + < < + > ] > . [
- ] > ]
] + < < < [ - [
- > + < ] + > [
- < + > > > - [ - > + < ] + + >
[ - < - > ] < <
< ] < < < < ] + + + + + + + + +
+ . + + + . [ - ] < ] + + + + +
* * * * * M a d e * B y : * N Y Y R I K K I * 2 0 0 2 * * * * *
Ausgabe:
Code:
*
* *
* *
* * * *
* *
* * * *
* * * *
* * * * * * * *
* *
* * * *
* * * *
* * * * * * * *
* * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
* *
* * * *
* * * *
* * * * * * * *
* * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
* * * *
* * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Weitere Beispiele lassen sich leicht mit der Suchmaschine deines Vertrauens aufspüren.
Zuletzt bearbeitet: