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 :
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook! Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook. Ook! Ook. Ook. Ook? Ook! Ook. Ook? Ook?
f*ckf*ck
Le langage f*ckf*ck[1] 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 :
1 1 1 1 1 1 1 1 1 1 00100 010 1 1 1 1 1 1 1 010 1 1 1 1 1 1 1 1 1 1 010 1 1 1 010 1 011 011 011 011 000 0011 010 1 1 001010 010 1 001010 1 1 1 1 1 1 1 001010 001010 1 1 1 001010 010 1 1 001010 011 011 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 001010 010 001010 1 1 1 001010 000 000 000 000 000 000 001010 000 000 000 000 000 000 000 000 001010 010 1 001010 010 001010
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 :
11111111110010001011111110101111111111010111010101101101101100000110101100101001010010101111111001010001010111001010010110010100110111111111111111110010100100010101110010100000000000000000000010100000000000000000000000000010100101001010010001010
Whitespace
Dans le langage Whitespace[2], 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.