Brainfuck

October 22, 2007

Dans des temps anciens et reculés, avant l’apparition du micro ordinateur personnel, il vivait un mathématicien du nom de Turing qui inventa la machine de Turing (comme c’est original vous ne trouvez pas ?). Cette machine se compose d’un ruban magnétique d’une longueur indéfinie (on suppose que quand on arrive au bout on peut l’allonger) et comportant des cases contenant la valeur d’un entier. Turing a démontré qu’il est possible d’adapter n’importe quel alogrithme pour sa machine. Il a par ailleurs été démontré que nos ordinateurs actuels sont équivalents à cette machine de Turing, ce qui leur confère aussi cette capacité d’executer n’importe quel algorithme. Enfin bref, de nos jours les ordinateurs utilisent des concepts bien plus évolués que la machine à ruban de Turing, ce qui fait que personne ne s’y est jamais intéressé… Sauf le suisse Urban Müller qui a inventé un langage de programmation qui permet de programmer un ordinateur comme on programmerai une machine de Turing. Ce langage est probablement le plus simple au mondre syntaxiquement parlant : il n’y a que 8 opérateurs :

  • > déplace le ruban vers la droite
  • < déplace le ruban vers la gauche
  • + incrémente la case
  • - décrémente la case
  • [ début de la boucle
  • ] fin de la boucle
  • . affichage du carractère correspondant au numéro dans la case
  • , demande d’un caractère à l’utilisateur et insertion de son numéro dans la case

Voici un exemple de programme (un hello world pour un peu d’originialité)

>+++++++++[<++++++++>-]<.>+++++++[
<++++>-]<+.+++++++..+++.>+++++++++
++++[<------>-]<-.>+++++++++++[<++
+++>-]<.>++++++[<++++>-]<.+++.----
--.--------.>+++++++++++[<------>-
]<--.+.>++++++++[<+++++++>-]<+++.>
++++++[<+++>-]<.

Vous pouvez d’ailleurs utiliser mon générateur de chaine (à utiliser depuis un shell linux). Pour de l’aide sur l’usage du convertisseur utilisez l’option -h.

Pour un complément d’informations, vous pouvez aller voir sur wikipedia ou alors sur ce très bon tutorial.

Bien qu’il existe un compilateur brainfuck, il est largement plus simple de l’interprêter. Sous linux, j’utilise le logiciel “bf” qui remplis parfaitement cette tâche et qui est intégré aux paquets ubuntu.

Sur ce, bon niquage de cerveau ! (c’est garanti si vous essayez de faire un programme un brin complexe…)

Filed under: Programmation

Leave a Comment

, (Hidden)

*

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

RSS feed for comments on this post.


Calendar

February 2012
M T W T F S S
« Oct    
 12345
6789101112
13141516171819
20212223242526
272829  

Recent Posts