# Programmation Brainfuck/Variantes

* Introduction
* Les 8 instructions du langage
* Compilateurs et interpréteurs
* Comment effectuer les opérations courantes
* Variantes
* Conclusion
* Introduction
* Les 8 instructions du langage
* Compilateurs et interpréteurs
* Comment effectuer les opérations courantes
* Variantes
* Conclusion
[ Modifier le sommaire ]
Le langage Brainfuck a inspiré plusieurs variantes du langage en le modifiant de différentes façons :
* Codage différent pour les 8 instructions du langage,
* Extension du langage par ajout d'instructions,

## Ook

Le langage Ook est une variante de brainfuck, Turing-complet, conçu pour être parfaitement lisible par un orang-outan, faisant référence au personnage du bibliothécaire de l'univers du Disque-monde de Terry Pratchett. Les instructions sont celles du langage Brainfuck codées par deux onomatopées "Ook" suivies chacune par une ponctuation parmi les 3 possibles : point, point d’interrogation, point d'exclamation.
| Ook | Brainfuck | Signification |
| Ook. Ook? | > | incrémente (augmente de 1) le pointeur. |
| Ook? Ook. | < | décrémente (diminue de 1) le pointeur. |
| Ook. Ook. | + | incrémente l'octet du tableau sur lequel est positionné le pointeur (l'octet pointé). |
| Ook! Ook! | - | décrémente l'octet pointé. |
| Ook! Ook. | . | sortie de l'octet pointé (valeur ASCII). |
| Ook. Ook! | , | entrée d'un octet dans le tableau à l'endroit où est positionné le pointeur (valeur ASCII). |
| Ook! Ook? | [ | saute à l'instruction après le Ook? Ook! correspondant si l'octet pointé est à 0. |
| Ook? Ook! | ] | retourne à l'instruction après le Ook! Ook? si l'octet pointé est différent de 0. |
| Ook? Ook? | | fin du programme. |
Il y a neuf possibilités : les 8 instructions, et l'instruction supplémentaire indiquant la fin du programme.
L'exemple du Hello World codé en Ook :

## f*ckf*ck

Le langage f*ckf*ck modifie le codage des instructions en les remplaçant par des mots de 4 lettres censurés, et permettant d'insérer des commentaires utilisant la syntaxe du langage C. Les 2ème et 3ème lettres des mots peuvent être remplacées par n'importe quel caractères ASCII.
| f*ckf*ck | Brainfuck | Signification |
| f**k | > | incrémente (augmente de 1) le pointeur. |
| s**g | < | décrémente (diminue de 1) le pointeur. |
| b**b | + | incrémente l'octet du tableau sur lequel est positionné le pointeur (l'octet pointé). |
| t**s | - | décrémente l'octet pointé. |
| c**k | . | sortie de l'octet pointé (valeur ASCII). |
| k**b | , | entrée d'un octet dans le tableau à l'endroit où est positionné le pointeur (valeur ASCII). |
| a**e | [ | saute à l'instruction après le b**t correspondant si l'octet pointé est à 0. |
| b**t | ] | retourne à l'instruction après le a**e si l'octet pointé est différent de 0. |
Signification particulière :
| f*ckf*ck | Signification |
| ! | Répéter la commande précédente. |
| /* | Début de commentaire. |
| */ | Fin de commentaire. |

## Spoon

Le langage spoon est équivalent au langage brainfuck mais avec des mots constitués de 0 et 1, utilisant un codage de Huffman.
| Spoon | Brainfuck | Signification |
| 010 | > | incrémente (augmente de 1) le pointeur. |
| 011 | < | décrémente (diminue de 1) le pointeur. |
| 1 | + | incrémente l'octet du tableau sur lequel est positionné le pointeur (l'octet pointé). |
| 000 | - | décrémente l'octet pointé. |
| 0010110 | , | entrée d'un octet dans le tableau à l'endroit où est positionné le pointeur (valeur ASCII). |
| 001010 | . | sortie de l'octet pointé (valeur ASCII). |
| 00100 | [ | saute à l'instruction après le 0011 correspondant si l'octet pointé est à 0. |
| 0011 | ] | retourne à l'instruction après le 00100 si l'octet pointé est différent de 0. |
Il possède deux instructions supplémentaires :
| Spoon | Signification |
| 00101110 | sortie de tout le tableau mémoire. |
| 00101111 | fin immédiate du programme. |
Hello world en spoon :
Les espaces peuvent être supprimés. On obtient alors un fichier binaire (exécutable) décodable sans ambiguïté :
Hello world en spoon sans espace :

## SegFaultProg

Le langage Segfaultprog est une variante du brainfuck, enrichie, extensible, destinée à être exécutée en machine virtuelle, sur de petites architectures (AVR, PIC, MIPS...). Son développement a débuté en mai 2010. Ce langage propose une simplification de la syntaxe du brainfuck (par exemple, avec l'adressage direct, et en évitant les répétitions), et rétro-compatibilité avec celui-ci.
Les commandes peuvent être suivie d'un argument sous la forme d'un octet (un caractère), représenté dans le tableau ci-dessous sous cette forme : argument.
| Commande | Description |
| > nb | Incrémente le pointeur de nb cases. |
| < nb | Décrémente le pointeur de nb cases. |
| * pos | Place le pointeur à la position pos. |
| + nb | Incrémente l'octet pointé de nb unités. |
| - nb | Décrémente l'octet pointé de nb unités. |
| [ | Début de boucle, saute après le crochet fermant correspondant si l'octet pointé vaut zéro. |
| ] | Fin de boucle, retourne après le crochet ouvrant correspondant si l'octet pointé ne vaut pas zéro. |
| . | Affiche la valeur de l'octet pointé. |
| , | Demande la saisie de la valeur de l'octet pointé. |
Les quatre dernières instructions du tableau ci-dessus correspondent exactement à celles du brainfuck. Il y a deux versions de la variante qui diffèrent pour la spécification des arguments :

### SegFaultProg V1

    Chaque argument est donné sous la forme d'un caractère.

### SegFaultProg V2

    Chaque argument est optionnel (1 par défaut) et spécifié sous l'une des deux formes suivantes :
   * Sous la forme d'un caractère, précédé de la lettre c (Caractère) ;
   * Sous la forme d'un nombre en décimal (ex : 7) ou en hexadécimal (ex : 0x2f) entre deux caractères dollar.
Hello world en SegFaultProg V1 :
Hello World en SegFaultProg V2 :

## Whitespace

Dans le langage Whitespace, les instructions sont plus nombreuses que dans le langage Brainfuck. Elles sont codés par des espaces, tabulations et retour à la ligne. Le code est donc invisible dans un texte.

## Pi

Pi est un langage de programmation ésotérique basé sur des erreurs de chiffre du nombre pi. Les 8 instructions du brainfuck sont codées par les chiffres de 0 à 8, en sautant le chiffre de pi correspondant à la position de l'instruction.
Si le chiffre est 8 ou 9 :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Si le chiffre est 4 :
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Si le chiffre est correct, il est ignoré.
Exemple : Hello world

## Références

* ↑ https://web.archive.org/web/20050318095341/http://www.chilliwilli.co.uk/ff/
* ↑ http://compsoc.dur.ac.uk/whitespace/
* ↑ Pi