BF ist eine außergewöhnliche Programmiersprache, die
ursprünglich um 1993 von Urban Müller für den Amiga
entwickelt wurde. Die Sprache arbeitet mit einem Datenarray aus einer festgelegten Anzahl von Parzellen
(in der Regel 10.000-30.000) und besteht aus einem Befehlssatz von
acht Befehlen, die zur Navigation innerhalb der Zellen, zu deren
Manipulation und als Schleifenkonstrukte dienen. Der Zugriff auf
das Datenarray geschieht über einen Zeiger und man hat ausserdem
noch die Möglichkeit Zeichen einzulesen bzw. auszugeben. Man kann
zeigen, das BF Turing vollständig ist. D.h. man kann mit ihr jedes
berechenbare Problem, das mit endlichem Speicher lösbar ist,
lösen.
Die BF Befehle: |
+ |
Aktuelle Zelle um 1 hochzählen |
- |
Aktuelle Zelle um 1 runterzählen |
> |
Den Zeiger auf die nächste Zelle setzen |
< |
Den Zeiger auf die vorherige Zelle setzen |
[ |
Start einer Schleife. Ist der Wert der aktuellen Zelle gleich
Null, wird die Schleife übersprungen bzw. abgebrochen. |
] |
Ende einer Schleife. Das Programm wird am zugehörigen
Schleifenanfang fortgesetzt. |
. |
ASCII-Wert der aktuelle Zelle ausgeben |
, |
Zeichen einlesen und ACSII-Wert in der aktuellen Zelle
speichern |
Das ist schon die ganze Sprache. Wichtig ist noch zu wissen,
dass das gesamte Datenarray zu Beginn mit 0 initialisiert ist, und
der Zeiger auf den Anfang des Datenarrays zeigt.
Dieser Aufbau macht es sehr einfach einen Interpreter für die
Programmiersprache zu schreiben. Der original Interpreter von
Urban Müller war nur 240 Bytes lang. Leider ist das
Programmieren in BF etwas mühselig. Daher wohl auch der
(unabgekürzte) Name der Sprache.
Aber ihr habt Glück, das Programmieren habe ich schon für euch
übernommen.
Das folgende Programm sagt euch wo der Cache versteckt ist:
>++++++++[<++++++++>-]<+++.>+++++[<++++++>-]<.++.>++[<++>-]<+.---.>+++++++[<----
---->-]<.>+++++[<++++++>-]<.>++++++[<++++++>-]<..+++.>+++[<---->-]<--.>++[<++>-]
<+.>++[<++>-]<+.>+++[<---->-]<-.>++++[<++++>-]<+++.>+++[<----->-]<.>+++[<+++>-]<
.>+++++++[<------->-]<---.>+++++[<----->-]<-.>++++++[<+++++++>-]<++++.>+++++[<--
--->-]<.----.>++++[<---->-]<-.>++++[<++++>-]<++.+.>++[<-->-]<-.>+++[<+++>-]<++.>
++[<-->-]<-.--.>++++[<---->-]<--.>++++++[<++++++>-]<+.>+++[<---->-]<--.>++++[<--
--->-]<---.>++++[<++++>-]<++..----.++++.++++.----.>++++++[<------>-]<----.>+++++
++[<++++++++>-]<++++++.>+++++[<++++++>-]<+++.>++[<++>-]<+.>++[<+++>-]<.>+++++++[
<-------->-]<--.>+++++[<----->-]<-.>++++++[<+++++++>-]<+++.>+++++[<+++++>-]<++++
.>+++[<++++>-]<.>++++[<---->-]<.>+++[<+++>-]<+.>++[<++>-]<+.---.>++++[<---->-]<-
.>++++++++[<-------->-]<-.>+++++++++[<+++++++++>-]<.+.>++++[<---->-]<-.>++++++++
[<-------->-]<-.>++++++[<+++++++>-]<.>+++++[<++++++>-]<.---.>++[<++++>-]<.>++[<+
+>-]<+.>++[<+++>-]<+.>++++[<------>-]<.>++++++++[<-------->-]<-.>+++++++++[<++++
+++++>-]<+.++++.>++++[<----->-]<-.>++++[<++++>-]<+.>+++[<---->-]<-.>++++++++[<--
------>-]<-----.>+++++++++[<+++++++++>-]<+++.>+++[<----->-]<.---.++++..>+++[<+++
+>-]<.>++++[<---->-]<-.>++++++++[<-------->-]<-.>++++++[<+++++++>-]<+++++.>+++++
[<+++++>-]<.>++[<++++>-]<.>++[<++>-]<+.---.
|
Viel Spaß beim Programmieren und Cachen wünscht euch
Thommy
Quellen und Links zum Thema: