2010-08-06 9 views
7

Para los no iniciados, Brainfuck es un lenguaje Turing completo con sólo 8 órdenes, todos los cuales tienen equivalentes literales en C:Estructuras de control que implementa en Brainfuck

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

En cualquier distribución de Linux que tiene un gestor de paquetes, Debería poder encontrar e instalar el paquete beef, un intérprete de Brainfuck para que pueda jugar en casa.

Como se puede ver arriba, pero tiene Brainfuck uno estructura de control, que se traduce en […] C como:

while (*ptr) { … } 

que le da todo el control de IF VAR = 0 THEN GOTO 10 desde el BASIC. A continuación se llamará getchar() hasta que vuelve 0:

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

Pero lo que si sólo quiero leer a un char nueva línea \n? Después de tener algunas dificultades para envolver mi cerebro en torno a cómo esto podría ser adaptado para trabajar como un simple if me ocurrió lo siguiente:

,   # *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; 
]   # } 

(Si alguien tiene una mejor forma de hacer esto, por favor hágamelo saber)

Ahora supongamos que quiero probar la salida de ese bucle en \r además de \n. ¿Cómo puedo probar cualquiera de los dos, dado que solo tengo una oportunidad para salir del círculo? Mi objetivo es poder emular switch, anidados if so if/else if s.

+1

No puede ser _no_ pregunta seria acerca de un lenguaje tan muerte cerebral. De hecho, así es como debería llamarse: Braindead :-) – paxdiablo

+4

Usted señor, es un hombre valiente. – Pierreten

+1

@SCMadsen Aquí está "Hello World": '++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > +. +++++++ .. +++.> ++. << ++++++++++++++++++++.>. +++ .------ .--------.> +.>. ' – NullUserException

Respuesta

3

No he echado un vistazo al enlace todavía, pero imagino que AShelly's answer es probablemente más universalmente útil ... sin embargo, como no me había atrevido a dejar que mis dedos escriban algo de Brainfuck antes, decidí que ahora era como bueno de un tiempo como cualquiera y fue capaz de obtener lo siguiente, que yo creo que funciona.

La segunda mitad es solo para imprimir lo que fue capturado por la primera parte. Además, no voy a mentir, mi cerebro realmente se siente completamente "jodido" después de haber tratado de resolver esto ... Un lenguaje muy apropiado, heh.

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

    < 
    [ 
     >> 
    ] 
    < 
] 

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

> 
[ 
    .> 
] 
+0

Gracias por el ejemplo! –

3

Consulte this page para obtener una descripción de cómo comenzar con la única estructura de control BF y definir una serie de secuencias cada vez más complejas que representan operaciones más sofisticadas.

4

Here son algoritmos para realizar la operación lógica, pero sencillo complejo para el Cerebro F * ck :)

Cuestiones relacionadas