Niveau :      
Résumé : brainfuck ; beef

Aujourd'hui détente avec un langage de programmation que vous n'utiliserez que très rarement. Il s'agit de brainfuck.

Brainfuck est un langage Turing-complet, ce qui veut dire qu'il est possible d'écrire en brainfuck n'importe quelle fonction qu'il serait possible d'écrire avec un autre langage.

Brainfuck ne dispose que de 8 fonctions, toutes s'écrivent sur un seul caractère. ces fonctions manipulent un unique pointeur. Ce pointeur peut se déplacer d'unité en unité sur un tableau infini (ou presque) en mémoire. Sur ces cases mémoire, il peut incrémenter et décrémenter à volonté les valeurs. Tout doit se faire avec ces bases. Ainsi pour ajouter 5 à une case mémoire, vous devez incrémenter 5 fois le contenu de la case, et je ne vous parle pas des multiplications ;-)

Les fonctions de base sont :

  • > : Incrémenter le pointeur
  • < : Décrémenter le pointeur
  • + : Incrémenter l'octet pointé
  • - : Décrémenter l'octet pointé
  • . : Écrire l'octet pointé sur la sortie
  • , : Lire un octet pour le mettre dans la case pointée
  • [ : Saute au ] correspondant si le contenu du pointeur est nul (goto if 0)
  • ] : Saute au [ correspondant si le contenu du pointeur est non nul (goto if !0)

Vous trouverez quelques programmes d'exemple en brainfuck sur le site de brainfuck

Pour développer en brainfuck, il vous faut un interpréteur. Vous le trouverez sous le nom de beef chez debian.

Malgré le peu de lisibilité des programmes obtenus, vous constaterez que c'est le langage dans lequel cat s'écrit de la façon la plus courte possible

,[.,]

Et maintenant, pour vous amuser, essayez de coder l'addition, la multiplication voire la division (sans regarder sur wikipedia s'il vous plait !). Ça vous ouvrira un peu l'esprit et vous changera du sudoku.

Après être devenu un pro, passez au calcul en virgule flottante.