Entwickler-Ecke

Off Topic - Kennt ihr Brainfuck?


lemming - Di 21.10.03 13:48
Titel: Kennt ihr Brainfuck?
Beim stöbern in den Archiven von DerEntwickler habe ich einen Artikel über Pascal und sein zwanzigjähriges bestehen gefunden. In dem Artikel kam auch die Programmiersprache Brainfuck ins gespräch.

Ich habe mal danach gegoogelt und ein paar Seiten gefunden. Die Sprache besteht aus nur 8 Operatoren. Das ganze funktioniert irgendwie so das ein Pointer hin und her geschoben wird bis das gewünschte Ergebnis vorliegt.

So ein typisches Brainfuck Programm sieht so aus:

Quelltext
1:
+++++[>+++++++++<-],[[>--.++>+<<-]>+.->[<.>-]<<,]                    


Das Programm gibt diesen Text aus:

Quelltext
1:
'SOME MORE BLOODY STUPID TESTING!'                    


Achja, der Brainfuck Compiler ist nur 240 Bytes groß. Es gibt angeblich sogar einen noch kleineren. 200 Bytes.

Kennt ihr Brainfuck und habt ihr schonmal damit was geamacht?


Alibi - Di 21.10.03 14:24

Ich hab einen Interpreter geschrieben und eine art Sparcompiler. Das Ding hängt einfach das BF Programm als Resource an einen weiteren, minimalen Interpreter an, der die Resource ausführt. Außerdem eine IDE (Mehr oder weniger ;)). Naja, Release kommt, sobald ich die Docs fertig habe.


barfuesser - Di 21.10.03 17:25
Titel: Re: Kennt ihr Brainfuck?
lemming hat folgendes geschrieben:
So ein typisches Brainfuck Programm sieht so aus:

Quelltext
1:
+++++[>+++++++++<-],[[>--.++>+<<-]>+.->[<.>-]<<,]                    


Das Programm gibt diesen Text aus:

Quelltext
1:
'SOME MORE BLOODY STUPID TESTING!'                    


Das glaub ich aber nicht! Das Programm erwartet eine Eingabe und wandelt diese in ein entsprechendes BrainFuck-Programm zur Ausgabe dieser Eingabe um.

barfuesser


Thunder - Di 21.10.03 17:43

cool.

das intressiert mich. ich googel mal...


Alibi - Di 21.10.03 17:44

Genau das macht es.
Für diesen Satz ist es auch viel zu klein, ein HalloWelt von mir sieht schon so aus:
>>+++++++++++++[<<+++++>>-]<< (Cell 1: 65)
+++++++. (H)
---. (E)
+++++++.. (LL)
+++. (O)
> >++++++++++[<+++>-]<++ .< ( )
++++++++. (W)
--------. (O)
+++. (R)
------. (L)
--------. (D)
>+.<, (!)

Alles, was in Klammern da steht ist bei meinem Interpreter ein Kommentar.


Popov - Di 21.10.03 18:22

Wer an primitiven "Sprachen" interresiert ist, der kann sich auch das Programm [http://www.delphi-forum.de/viewtopic.php?p=48476#48476] angucken. Es arbeitet eigentlich nach der gleichen Methode wie Brainfuck, nur mit dem Unterschied, daß hier nicht "++++++++++" geschrieben wird, sondern eher "Inc 10". Beide Codes sind genauso complizert, nur ist Brainfuck schwerer lesbar.


lemming - Mi 22.10.03 08:32

Wie ich sehe habt ihr alle schon ziemlich Ahnung davon. Ich dachte das wäre eine komplett unbekannte Geschichte.

Zu dem Code den ich oben gepostet hab, den hab ich auf einer eite gefunden wo die Contests machen, wer den kleinsten Code schafft.


Anonymous - Mi 22.10.03 10:51

Ich habs damals soweit gebracht dass ich if-abfragen in meine "Programme" eingebaut hab. Aber dann hab ich auch irgendwann aufgegeben.


Quelltext
1:
2:
3:
,[>>+>+<<<-]>>[<<+>>-]<+++++[>+++++++++++++<-]>>[<->-][-]+<[>-<[-]]>[[-]>++++++++[-<++++++++++>]<+++.>++[-<++++++++++>]<++++++++.++++.----.>++++++[-<---------->]<-------.>+[-<---------->]<--.>++++++[-<++++++++++>]<++++++++.>+[-<++++++++++>]<+++++++.>++++++++[-<---------->]<-----.>++++++++[-<++++++++++>]<+++++++.>+[-<---------->]<----.+++..+++++++.+.>++++++++[-<---------->]<----.>++++++[-<++++++++++>]<+++++.>+[-<++++++++++>]<+.+++++++.----.>+++++++[-<---------->]<---------.++.>+++[-<++++++++++>]<+.>+++[-<---------->]<-.-...[-]]<<<[>>+>+<<<-]>>[<<+>>-]<+++++[>++++++++++++++<-]>>[<->-][-]+<[>-<[-]]>[[-]
>+++++++[-<++++++++++>]<.>++[-<---------->]<------.>+[-<---------->]<--.>++++++++[-<++++++++++>]<+++++++.>+[-<---------->]<----.----.>++++++[-<---------->]<---------.>+++[-<++++++++++>]<++++++++.>++++[-<++++++++++>]<+.--------.--.+++++++.>++++++[-<---------->]<----.>+[-<---------->]<--.>+++[-<++++++++++>]<++++++++.>+++[-<++++++++++>]<+.>+[-<++++++++++>]<+++.>+[-<---------->]<----.>++++++[-<---------->]<--------.>++++++++[-<++++++++++>]<+++++.-------.>+[-<---------->]<.>++++++[-<---------->]<--------.>+++[-<++++++++++>]<++++++++.>++[-<++++++++++>]<+++++++.>++[-<++++++++++>]<.>+++++++[-<---------->]<-.
[-]]<<<


Das Programm erwartet eine Eingabe von A oder F.
Und hier ist der eigentliche Code fürs If:
In der 2. Zeile wird der ASCII-Code für das einzugebende Zeichen eingetragen... (A)


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
,

>+++++[<------------->-]< (A)

>[-]->[-]+<<[>+>[-]<]>
[ (ist A)

,. (Ein ZEichen einlesen und Ausgeben)

[-]]


Raphael O. - Mi 22.10.03 11:18

und was ist der Sinn von dem ganzen?? :roll:


JustQt - Mi 22.10.03 11:21
Titel: ...
Das ist jetzt nicht Euer Ernst, oder?? :eyecrazy:

Und ich dachte schon Perl sei kryptisch...


barfuesser - Mi 22.10.03 11:46

Wieso ist Perl kryptisch? Ich empfinde normalen Perl-Code als recht gut lesbar. Zugegeben man kann mit Perl wesentlich kryptischere Sachen als mit C machen. Und es gibt auch wunderschöne Einzeiler, die das illustrieren. Aber wieviele Quelltexte sind auf diese Art geschrieben?

Um aber mal ein Beispiel für eine sinnvolle Programmiersprache mit einem interessanten Konzept und teilweise kryptischem Quellcode (die Wörterbucheinträge) zu bringen: Was haltet Ihr von Forth?

barfuesser


joerg68 - Mi 22.10.03 11:51

Wenn ich mir die Codeauszüge so ansehe weiß ich jetzt warum die Sprache Brainfuck heißt :nut: :mrgreen: :puke:
Das ist ja ne Sprache für jemand der Vater und Mutter erschlagen hat
Gruß
Jörg


ak - Mi 22.10.03 12:24

Zitat:
Das ist ja ne Sprache für jemand der Vater und Mutter erschlagen hat


hehe der war gut


NCortex - Mi 22.10.03 15:51

dem kann cih nur zustimmen....

vorallem, wie viel langeweile muss man haben, um damit eine if-abfrage zu coden, den sonst eh kein mensch versteht?

ich hab mir brainfuck mal ganz kurz angeguckt, aber dann schnell weggeschmissen, weil ich das bisschen Gehirn, was mir blieb noch behalten wollt..


Alibi - Mi 22.10.03 17:26

http://www.delphi-forum.de/viewtopic.php?p=103761#103761


lemming - Do 23.10.03 15:48

So zum coden ist es schon spassig. Man konzentriert sich wirklich nur auf das absolut wesenstliche und man kann schöne Progs damit machen. So was ich gesehen habe.

Meiner Meinung nach gehts kaum Basicer. Das hat auch der CCC Köln entdeckt und denkt ernsthaft über eine Umsetzung in die Maschinenwelt nach.

The Game Of Life ist auch sowas womit man sich Stundenlang beschäftigen kann ohne das was richtig dabei raus kommt.


Spieler1 - Do 23.10.03 17:03

Gibt es eigentlich auch größere oder sinnvolle Programme, die in Brainfuck geschrieben wurden? Theoretisch ist damit doch alles möglich, oder? Nur praktisch ist es halt .... kompliziert. :lol:
Wie ist eigentlich Assembler im Vergleich zu Brainfuck? Ich kann beides nicht :oops: . Ist Assembler einfacher?


Anonymous - Do 23.10.03 17:34

Mit Brainfuck lassen sich theoretisch alle Probleme lösen (da es eine Touringmaschine ist). Praktisch aber nicht, weil du nicht beliebig viel RAM und Rechenleistung zur Verfügung hast.
Allerdings habe ich auch schon BrainFuck-Programme gesehen, die Primzahlen (Primfaktorzerlegung) u.a. ausrechnen. Da muss man dann aber schon wirklich langeweile haben.
Besonders lustig sind Programme die den eigenen Quellcode ausgeben.
z.B: das:


Quelltext
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:
>++++++++>++++++>+>+++>++++++>++>+++++>++++>++++++>+>+++>++++>++
+++>+>++++++>+++>+++>+++++>+++++++>+++>++++++>++++>++>++>++++++>
++++>+++>+++>+>++>++>+++++>+++++>++>++++>++++++>+>++>++++>+++++>
++>++++++>++++>+++>+>++++++>++++>+++>+>+++++>++++>+++>+>++++++++
>++>++++>++++++>+>++>++++>+++++>+>+++++>+++>+>++>++++>+++++>+>++
+>++++++>+>+++>++++++>++>+++++>++++>++++++>+>+++>++++>+++++>+>++
++++>+++>+++>+++++>+++++++>+++>+++>++++++>++>++>+++++>++>++++++>
++++>+++>+++++++>++>+++++>+++>+++>+++>+++++++>++>++>++>++>++++>+
+++++>+>++>++++>+++++>++>++++++>++++>++++++++>+++>+>++++++>++++>
+++>+>+++++>++++>+++>+>++>++++>++++++>+>++>++++>+++++>+>+++++>++
+>+>++>++++>+++++>+>+++>++++++>++>+++++>++++>++++++>+>+++>++++>+
++++>+>++++++>+++>+++>+++++>+>+>+>+>+>+>+>+>+>+>++>++>+>++>++>+>
+>+>++>++>+>++>++>++>++++++++>++>++>++>+>+>++>++>++++>++++>++>++
>++++>+++>++++++>++++>++>++++++>+++>+++>+++++>+>+>+>++>++>+>+>+>
+>+>+>++>++>+>+>+>+>+>+>++>++>+>+>+>++>++>+>+>+>+>++>++>+>+>+>+>
++>++>+>+>+>++>+++++>++>++++++++>++++++>++++>+++>+>+>+>++>+++++>
+>+>+>+>+>++>++>++>++++++>++>+++++>++++>++>++>++++++>+++>+++>+++
+++>++++>++>++++++>+++>+++++>+>+++>++++++>++>+++++>+++++>++++>++
>++++++>+++>+++++>+>++++++>++>+++++>++>++++++>++++>+++>+++>+>++>
+>++>+++++>+++++>+++>+++>+++>++++>++>++>++
>>>-<<<[[>+>+<<-]>[>]+[<]>-[[>]<+[<]>-]<<]>>-[>]>>>+++++[>+++<-]
>[>+++>>++++>>++++>>+++>>++++++>>++++++>>+++[<<]>-]<->>-->>++>>>
>>>+>>+++>>+>>++++++++++[<<]+[-<+]-[>]<+[->+<[+[->+]->+<-[+<-]+<
-]>[->+]->>>>.<<<[>.<-]>[>>]<<.[<<]+[-<+]-[>]<+]<+[->+<[+[->+]->
+<-[+<-]+<-]>[->+]->[[>>+<<-]>>-]<.[<<]+[-<+]-[>]<+]


ka wie man auf sowas kommt


lemming - Fr 24.10.03 10:43

Zitat:
Wie ist eigentlich Assembler im Vergleich zu Brainfuck? Ich kann beides nicht . Ist Assembler einfacher?


Ja es ist einfacher, aber kaum vergleichbar. Sieht zwar beides komisch aus, für einen OO-Programmierer.


NCortex - Fr 24.10.03 11:51

also: ich hab zwar den komischen compiler für brainfuck, aber wenn ich die quellcodes von heir nehm spuckt der nix aus, liegt das an mir???


barfuesser - Fr 24.10.03 12:28

Also bei mir gingen eigentlich alle, bis auf das von obbschtkuche. Das löst bei meinem Interpreter einen RANGE ERROR aus.

barfuesser


maze2k - Mo 27.10.03 21:32

Achja, an alle die es interessiert (ich studier ja grad Informatik und da hat man uns auf der uni-HP nen Link gegeben:
Link [http://www.muppetlabs.com/~breadbox/bf/]

Vielleicht kennt ihr die Seite ja noch nich :)


Anonymous - Mo 27.10.03 21:49

barfuesser hat folgendes geschrieben:
Also bei mir gingen eigentlich alle, bis auf das von obbschtkuche. Das löst bei meinem Interpreter einen RANGE ERROR aus.

barfuesser


Das hängt dann am Interpreter. Wenn der als "0-1" nicht 255 nimmt, funzts nicht.