Brainfuck, c'est quoi ?
C'est un Turing-tarpit, un langage Turing-complet minimaliste. Son intérêt et de présenter 8 opérateurs ('<','>','+','-','.','.','[',']') et aucune opérande, et de pouvoir implémenter n'importe quel algorithme (pourvu que la taille de la mémoire soit infinie).
Mode de fonctionnement
La machine Brainfuck est constituée de 5 élements :
- Un pointeur, ou tête de lecture, qui peut lire et écrire des données, et se déplacer de manière séquentielle
- Une bande de mémoire, qui peut contenir des valeurs entières
- Un lecteur de programme, qui ne peut être contrôlé que par lui-même
- Un gestionnaire d'entrées (clavier)
- Un moyen de sortie (écran/imprimante)

Les opérateurs agissent sur la tête de lecture, à l'exception de [ et ] qui agissent sur le lecteur de programme.
- + incrémente la valeur dans l'élement sous la tête de lecture
- - la décrémente
- < décale la tête de lecture vers la gauche
- > vers la droite
- , demande l'entrée d'une valeur et la stocke là où la tête de lecture se trouve
- . imprime la valeur contenue sous la tête de lecture
- [ marque le début d'une boucle executée si la valeur sous la tête de lecture est différente de 0.
- ] marque la fin de la boucle : quand on le rencontre, on retourne au [ associé (Brainfuck maintient une pile d'associations en interne)
Tout ce qui n'est pas l'un de ces 8 caractères est considéré comme commentaire.
Exemples de programmes
Additionner deux valeurs. Ce programme lit deux valeurs, les additionne et affiche le résultat. Il détruit les deux variables d'entrée (i.e. les modifie)
,>,< on lit les 2 valeurs
[ debut de la boucle
->+<
]
>. on decale et on affiche
Faire le perroquet jusqu'à ce que l'on tape sur entrée (ASCII 10)
, on lit le premier caractère
=D[début de la boucle
| , on lit le caractère
| . on l'affiche
| -----
| ----- on lui soustrait 10
| ] fin de la boucle, on retourne au début (suivre la fleche)
Idées de programmes pour aller plus loin
- Un programme qui copie une variable dans la case mémoire d'à côté (sans détruire la source)
- Un programme qui affiche une chaîne de caractère déjà enregistrée (hint : elles se terminent par une valeur nulle)
- Un programme qui prend une chaîne de caractère en entrée, jusqu'à ce que l'on appuie sur Entrée, puis qui la lit à l'endroit, puis à l'envers.
- Un multiplicateur, destructeur ou non
