2010-08-06 3 views
7

Für den Laien Brainfuck ist eine Turing-complete Sprache mit nur 8 Befehle, von denen alle wörtlichen Äquivalente in C:Ausführungskontrollstrukturen in Brainfuck

bf c 
---------------------- 
>  ++ptr; 
<  --ptr; 
+  ++*ptr; 
-  --*ptr; 
.  putchar(*ptr); 
,  *ptr=getchar(); 
[  while (*ptr) { 
]  } 

auf jedem Linux-Distribution, die einen Paket-Manager hat, Sie sollten in der Lage sein, das Paket beef, einen Brainfuck-Interpreter zu finden und zu installieren, damit Sie zu Hause mitspielen können.

Wie Sie oben sehen können, hat aber Brainfuck eine Kontrollstruktur, […], die zu C übersetzt:

while (*ptr) { … } 

mit dem Sie alle Kontrolle über IF VAR = 0 THEN GOTO 10 von BASIC gibt. Im Folgenden wird getchar() rufen, bis er zurückkehrt 0:

, # *ptr = getchar(); 
[ # while (*ptr) { 
    >, # *(++ptr) = getchar(); 
] # } 

Aber was, wenn ich will nur \n zu einem Newline Zeichen lesen? einige Schwierigkeiten Einwickeln mein Gehirn Nachdem sich um, wie dies als eine einfache if arbeiten angepasst werden könnte, kam ich mit dem Follow-up:

,   # *ptr = getchar();  /* store input        */ 
---------- # *ptr -= 10;   /* test for \n by subtracting 10 before loop */ 
[   # while (*ptr) {   /* if *ptr == 0, last char read was \n  */ 
    ++++++++++ # *ptr += 10;   /* wasn't \n, add 10 back to val under ptr */ 
    >,   # *(++ptr) = getchar(); 
    ---------- # *ptr -= 10; 
]   # } 

(Wenn jemand einen besseren Weg, dies zu tun hat, lass es mich wissen)

Jetzt sagen wir, ich möchte Break out dieser Schleife auf \r zusätzlich zu \n testen. Wie kann ich beides testen, da ich nur eine Möglichkeit habe, aus der Schleife auszubrechen? Mein Ziel ist es, emulieren switch, verschachtelt if s oder if/else if s.

+1

Es _no_ ernste Frage über eine solche hirntoten Sprache sein kann. In der Tat, so sollte es heißen: Braindead :-) – paxdiablo

+4

Sie, mein Herr, sind ein tapferer Mann. – Pierreten

+1

@SCMadsen Hier ist "Hallo Welt": "++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > +. +++++++ .. +++.> ++. << +++++++++++++++.>. +++ .------ ....>>.>. ' – NullUserException

Antwort

3

Ich habe mir den Link noch nicht angeschaut, aber ich stelle mir vor, dass AShelly's answer wahrscheinlich universeller nützlich ist ... aber, nicht gewagt, meine Finger einige Brainfuck tippen zu lassen, entschied ich, dass jetzt war als gut einer Zeit wie jeder und war in der Lage, die folgenden zu bekommen, die ich denke funktioniert.

Die zweite Hälfte ist nur zum Ausdrucken, was vom ersten Teil erfasst wurde. Außerdem werde ich nicht lügen, mein Gehirn fühlt sich tatsächlich gründlich "gefickt", nachdem er versucht hat, dies auszuarbeiten ... Eine sehr treffend benannte Sprache, heh.

+ 
[ 
    >, 
    ---------- 
    [ 
     --- 
     [ 
      +++++++++++++ 
      >> 
     ] 
    ] 

    < 
    [ 
     >> 
    ] 
    < 
] 

++++++++++++ 
[ 
    < 
] 

> 
[ 
    .> 
] 
+0

Danke für das Beispiel! –

3

Siehe this page für eine Beschreibung, wie man mit der einzelnen BF-Kontrollstruktur beginnt und eine Reihe zunehmend komplexer Sequenzen definiert, die komplexere Operationen darstellen.

4

Here sind Algorithmen Grund LOGISCH aber komplexe Operation für Hirn F * ck ausführen :)