(Remarque juste après avoir écris tout ça : je viens de voir qu'un sujet/tuto un peu semblable existe déjà - ici -, désolé :/)
Bonjour, je suis nouveau sur le forum et je souhaites vous faire partager le "plaisir" du développement en BrainFuck, qui, comme son nom l'indique, consiste en une sorte de masturbation intellectuelle.
Donc voilà un bref tutoriel sur le BrainFuck.
Quel est l'utilité du BrainFuck ?
Le BrainFuck, aussi abrégé BF, n'a pas vraiment d'utilité propre, c'est plutôt un divertissement, très étrange je vous l'accorde, un moyen de se lancer des petits challenges.
Qu'est-ce que le BrainFuck ?
Le BrainFuck, c'est un langage de programmation pour le moins minimaliste. En effet, lorsqu'on développe en BF, on ne dispose que d'un nombre très limité d'instructions.
Il n'existe en effet que huit instructions, soit beaucoup moins que les différentes instructions possible sur un processeur moderne...
Théoriquement, on est censé pouvoir écrire n'importe quel programme en brainfuck, en effet, celui-ci est dit "turing complet".
Principe du BrainFuck
L’environnement du brainfuck nous fournit deux éléments simple pour stoker de l'information : une bande et un pointeur.
------------------------------------------------------------------
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
----------------------/^\---------------------------------------
La bande est constituée, comme vous pouvez le voir, d'un ensemble de valeurs, 0 par défaut.
Il est possible de déplacer le pointeur vers la droite ou vers la gauche, de case en case.
Instructions BF
En réalité, dans le "vrai" BF, l'instruction "." affiche le caractère correspondant à la valeur de la case pointée en se référant au code ASCII.
Aussi, il existe deux autres instructions :
Ces instructions sont fondamentales : elle permettent de faire des boucles conditionnelles en BF.
Lorsque l'ordinateur croise dans le code BrainFuck l'instruction "[", alors il regarde la valeur de la case pointée :
En gros, tant que la valeur de la case pointée est différente de zéro, ce qui est entre crochets se répétera.
Voilà, vous savez tout sur le BrainFuck. Toutefois, pour réaliser réellement un programme plus aisément, je vais vous donner quelques briques supplémentaires.
Copier des données
Il vous arrivera souvent d'avoir à copier une case vers une ou plusieurs autres.
Vous ne disposez toute fois d'aucune commande du type "COPY". Vous n'avez que +-><[] pour manipuler des nombres...
En fait, nous allons utiliser une petite astuce, nous allons utiliser les crochets. Par exemple pour copier la valeur une case dans les deux suivante :
En résumé, le code : [>+>+<<]
Additionner
Pour additionner, la logique est strictement identique à celle de la copie : on copie en fait une case non nulle sur une case non nulle par incrémentation (addition de 1, avec l'instruction "+") ce qui produit en somme une addition.
S'entrainer
Pour vous entrainer au BF, je vous conseille d'utiliser un petit script de ma conception (HTML/JS) qui aide à la compréhension du BF puisqu’il permet de visualiser la bande mémoire et le pointeur pendant l’exécution du code.
(Attention, ce script n'a aucunement pour objectif les performances lors de l’exécution du code BF, aussi il a été codé plutôt rapidement...)
Télécharger : http://dl.free.fr/v7ALNq9rB
Exemple de programme : la suite de Fibonacci
Ce programme BF ne fonctionne pas sur un interpréteur affichant le caractère ASCII correspondant à la valeur d'une case lorsque l'on utilise l'instruction ".". Cela ne respecte pas donc le "vrai" BF.
Code :
+>>+<< <<++++++[->>
[<+>>+<-] < [->+<] > >> [->+<] > [-<<<+>>>] << [->+<] <.
<<]
Très brève explication :
[_C_|_a'_|_a_|_a"_|_b_|_b'_]
C : nombre itérations
a : Nombre 1
b : Nombre 2
(Pour tout x) x' ou x'' : copie(s) de x
Voilà pour ce rapide tutoriel inutile
(Et désolé pour les éventuelles erreur / fautes / imprécisions !)
Bonjour, je suis nouveau sur le forum et je souhaites vous faire partager le "plaisir" du développement en BrainFuck, qui, comme son nom l'indique, consiste en une sorte de masturbation intellectuelle.
Donc voilà un bref tutoriel sur le BrainFuck.
Quel est l'utilité du BrainFuck ?
Le BrainFuck, aussi abrégé BF, n'a pas vraiment d'utilité propre, c'est plutôt un divertissement, très étrange je vous l'accorde, un moyen de se lancer des petits challenges.
Qu'est-ce que le BrainFuck ?
Le BrainFuck, c'est un langage de programmation pour le moins minimaliste. En effet, lorsqu'on développe en BF, on ne dispose que d'un nombre très limité d'instructions.
Il n'existe en effet que huit instructions, soit beaucoup moins que les différentes instructions possible sur un processeur moderne...
Théoriquement, on est censé pouvoir écrire n'importe quel programme en brainfuck, en effet, celui-ci est dit "turing complet".
Principe du BrainFuck
L’environnement du brainfuck nous fournit deux éléments simple pour stoker de l'information : une bande et un pointeur.
------------------------------------------------------------------
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
----------------------/^\---------------------------------------
La bande est constituée, comme vous pouvez le voir, d'un ensemble de valeurs, 0 par défaut.
Il est possible de déplacer le pointeur vers la droite ou vers la gauche, de case en case.
Instructions BF
- > : Déplace le pointeur d'une case vers la droite
- < : Déplace le pointeur d'une case vers la gauche
- + : Augmente de 1 la valeur de la case pointé par... le pointeur
- - : Soustrait de 1 la valeur de la case pointé par le pointeur
- ? : Demande à l'utilisateur une valeur puis écrase la case pointé avec la nouvelle valeur
- . : Affiche la valeur de la case pointée.
En réalité, dans le "vrai" BF, l'instruction "." affiche le caractère correspondant à la valeur de la case pointée en se référant au code ASCII.
Aussi, il existe deux autres instructions :
- [
- ]
Ces instructions sont fondamentales : elle permettent de faire des boucles conditionnelles en BF.
Lorsque l'ordinateur croise dans le code BrainFuck l'instruction "[", alors il regarde la valeur de la case pointée :
- Si celle-ci vaut 0, alors il saute jusqu'à la fin de la boucle, soit jusqu'à "]"
- Si celle-ci est différente de 0, alors il continue la lecture du code, puis, lorsqu'il croise l’instruction "]", il revient à l'instruction "[".
En gros, tant que la valeur de la case pointée est différente de zéro, ce qui est entre crochets se répétera.
Voilà, vous savez tout sur le BrainFuck. Toutefois, pour réaliser réellement un programme plus aisément, je vais vous donner quelques briques supplémentaires.
Copier des données
Il vous arrivera souvent d'avoir à copier une case vers une ou plusieurs autres.
Vous ne disposez toute fois d'aucune commande du type "COPY". Vous n'avez que +-><[] pour manipuler des nombres...
En fait, nous allons utiliser une petite astuce, nous allons utiliser les crochets. Par exemple pour copier la valeur une case dans les deux suivante :
N° | Opération | Instruction BF | Position pointeur |
1 | Tant que la case est différente de 0 | [ | Case n°1 |
2 | Soustraire de 1 la case pointée | - | Case n°1 |
3 | Se déplacer vers la droite | > | Case n°2 |
4 | Ajouter 1 à la case pointée | + | Case n°2 |
5 | Se déplacer vers la droite | > | Case n°3 |
6 | Ajouter 1 à la case pointée | + | Case n°3 |
7 | Revenir à la première position | << | Case n°1 |
8 | Fin de la boucle | ] | Case n°1 |
Additionner
Pour additionner, la logique est strictement identique à celle de la copie : on copie en fait une case non nulle sur une case non nulle par incrémentation (addition de 1, avec l'instruction "+") ce qui produit en somme une addition.
S'entrainer
Pour vous entrainer au BF, je vous conseille d'utiliser un petit script de ma conception (HTML/JS) qui aide à la compréhension du BF puisqu’il permet de visualiser la bande mémoire et le pointeur pendant l’exécution du code.
(Attention, ce script n'a aucunement pour objectif les performances lors de l’exécution du code BF, aussi il a été codé plutôt rapidement...)
Télécharger : http://dl.free.fr/v7ALNq9rB
Exemple de programme : la suite de Fibonacci
Ce programme BF ne fonctionne pas sur un interpréteur affichant le caractère ASCII correspondant à la valeur d'une case lorsque l'on utilise l'instruction ".". Cela ne respecte pas donc le "vrai" BF.
Code :
+>>+<< <<++++++[->>
[<+>>+<-] < [->+<] > >> [->+<] > [-<<<+>>>] << [->+<] <.
<<]
Très brève explication :
[_C_|_a'_|_a_|_a"_|_b_|_b'_]
C : nombre itérations
a : Nombre 1
b : Nombre 2
(Pour tout x) x' ou x'' : copie(s) de x
Voilà pour ce rapide tutoriel inutile
(Et désolé pour les éventuelles erreur / fautes / imprécisions !)
Commentaire