2010-08-06 25 views
7

Pour les non-initiés, Brainfuck est un langage Turing-complet avec seulement 8 commandes, qui ont tous équivalents littéraux dans C:Structures de mise en œuvre dans Brainfuck

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

Sur une distro linux qui a un gestionnaire de paquets, vous devriez être en mesure de trouver et d'installer le paquet beef, un interprète Brainfuck de sorte que vous pouvez jouer à la maison.

Comme vous pouvez le voir ci-dessus, mais Brainfuck a une structure de contrôle, […] qui se traduit par C comme:

while (*ptr) { … } 

Ce qui vous donne tout le contrôle de IF VAR = 0 THEN GOTO 10 de BASIC. Le suivant appellera getchar() jusqu'à ce qu'il retourne 0:

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

Mais si je veux seulement lire une nouvelle ligne omble \n? Après avoir quelques difficultés envelopper mon cerveau autour de la façon dont cela pourrait être adapté pour fonctionner comme un simple if je suis venu avec ce qui suit:

,   # *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 quelqu'un a une meilleure façon de le faire, s'il vous plaît laissez-moi savoir)

maintenant, supposons que je veux tester sortir de cette boucle sur \r en plus \n. Comment puis-je tester l'un ou l'autre, étant donné que je n'ai qu'une seule occasion de sortir de la boucle? Mon but est de pouvoir émuler switch, imbriqué if s ou if/else if s.

+1

Il peut être question _no_ sérieux au sujet de ce langage de mort cérébrale. En fait, c'est ce qu'il faudrait appeler: Braindead :-) – paxdiablo

+4

Monsieur, vous êtes un homme courageux. – Pierreten

+1

@SCMadsen Voilà "Bonjour tout le monde": '++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > +. +++++++ .. +++.> ++. << +++++++++++++++.>. +++ .------ .--------.> +.>. ' – NullUserException

Répondre

3

Je n'ai pas encore regardé le lien, mais j'imagine que AShelly's answer est probablement plus utile universellement ... cependant, n'ayant pas osé laisser mes doigts taper quelque Brainfuck avant, j'ai décidé que maintenant c'était comme bon d'un temps comme tout et a été en mesure d'obtenir ce qui suit, qui fonctionne pense.

La seconde moitié est juste pour imprimer ce qui a été capturé par la première partie. De plus, je ne vais pas mentir, mon cerveau se sent en effet bien "baisé" après avoir essayé de s'en sortir ... Une langue très bien nommée, heh.

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

    < 
    [ 
     >> 
    ] 
    < 
] 

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

> 
[ 
    .> 
] 
+0

Merci pour l'exemple! –

3

Voir this page pour une description de la façon de commencer par la structure de contrôle unique BF et définir une série de séquences de plus en plus complexes représentant des opérations plus sophistiquées.

4

Here sont des algorithmes pour effectuer une opération LOGIQUE mais complexe de base pour le cerveau F * ck :)