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.
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
Monsieur, vous êtes un homme courageux. – Pierreten
@SCMadsen Voilà "Bonjour tout le monde": '++++++++++ [> +++++++> ++++++++++> +++> + <<<<-]> ++. > +. +++++++ .. +++.> ++. << +++++++++++++++.>. +++ .------ .--------.> +.>. ' – NullUserException