Nous allons respectivement étudier les algos suivants :
- Brainfuck
- Ook!
- Spoon
- SegFaultProg
Les trois derniers sont des dérivés du langage Brainfuck (BF).
Qu'est-ce que le BrainFuck ? Le BrainFuck est un langage Turing-Complet minimaliste, assez complexe à première vue, car il diffère grandement, dans sa méthode de traitement, des autres langages connus. Cependant, sa manipulation est relativement simple car il ne possède que 8 instructions au total.
Son schéma de fonctionnement est simple : au départ un tableau d'octets (30 000 cases) est initialisé à 0 pour tous ses octets. Ensuite, un pointeur (tête de lecture) est placé sur le premier octet du tableau puis se déplace ensuite dans le tableau. Enfin, deux files d'octets (in et out) gérant l'entrée et la sortie.
Voici le tableau regroupant les 8 instructions :
Ce langage utilise la correspondance caractère ↔ code ASCII afin d'afficher les-dits caractères.
Voici un exemple de traitement de l'Hello World ! :
On a donc :
L'on peut voir les incrémentations. Par exemple « >++. » qui incrémente de 2 l'octet sur lequel est le pointeur, ainsi 70 passe à 72 qui est la valeur correspondante au caractère « H ».
Voici quelques exemples :
input → Test
output →
input → Vive le hacking !
Output →
input → Happy new year 2012
output →
Je vous mets ici ce que pourrait donner le traitement de l'algorithme en Python :
Langage Ook! :
C'est également un langage Turing-Complet minimaliste élaboré dans le but d'êtreparfaitement compris par un orang-outan. Il fonctionne exactement de la même manière que le BrainFuck, il n'y a que les instructions qui changent.
Voici le tableau récapitulant les instructions et leur comparaison avec le BF :
Quelques exemples :
input → What's this ?
output →
input → Hasta la vista
output →
Notez les espaces.
Mêmes input que pour le BrainFuck.
Langage Spoon :
Dérivé lui aussi du BrainFuck ; les instructions ici sont des séquences de 0 et 1.
Voici le tableau récapitulant les instructions :
Quelques exemples :
input → Who's the master Leroy ?
Output →
input → A mon commandement !
Output →
Notez les espaces entre les séquences.
SegFaultProg :
Dérivé du BrainFuck également mais censé le simplifier.
Voici la liste récapitulant les instructions :
> (OPTIONS)
: Incrémente le pointeur mémoire(de OPTION cases)
< (OPTIONS)
: Décrémente le pointeur mémoire(de OPTION cases)
* [ARGUMENT]
: Place le pointeur à l'adresseARGUMENT
+ (OPTIONS)
: Incrémente la valeur de l'octet(de OPTION unités)
- (OPTIONS)
: Décrémente la valeur de l'octet(de OPTION unités)
[
: Commence une boucle
]
: Retour au [ correspondant si lavaleur de l'octet courant est
nulle
.
: Ecrit la valeur de l'octet courantsur la sortie.
,
: Demande une saisie utilisateur
Exemple :
input → Hello world
output →
madhat
- Brainfuck
- Ook!
- Spoon
- SegFaultProg
Les trois derniers sont des dérivés du langage Brainfuck (BF).
Qu'est-ce que le BrainFuck ? Le BrainFuck est un langage Turing-Complet minimaliste, assez complexe à première vue, car il diffère grandement, dans sa méthode de traitement, des autres langages connus. Cependant, sa manipulation est relativement simple car il ne possède que 8 instructions au total.
Son schéma de fonctionnement est simple : au départ un tableau d'octets (30 000 cases) est initialisé à 0 pour tous ses octets. Ensuite, un pointeur (tête de lecture) est placé sur le premier octet du tableau puis se déplace ensuite dans le tableau. Enfin, deux files d'octets (in et out) gérant l'entrée et la sortie.
Voici le tableau regroupant les 8 instructions :
Ce langage utilise la correspondance caractère ↔ code ASCII afin d'afficher les-dits caractères.
Voici un exemple de traitement de l'Hello World ! :
On a donc :
Code:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Voici quelques exemples :
input → Test
output →
Code:
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++++++++++++++.>+. ++++++++++++++. +.
Output →
Code:
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>>--------------.+++++++++++++++++++. +++++++++++++. -----------------. <<++.>>+++++++. -------. <<. >>+++. -------. ++.++++++++. --. +++++. -------. <<. +.
output →
Code:
++++++++++[>+>+++>+++++++>++++++++++<<<<-]>>>++.>---. +++++++++++++++. . +++++++++. <<++. >>-----------.---------. ++++++++++++++++++. <<. >>++.--------------------. ----. +++++++++++++++++. <<.++++++++++++++++++. --. +. +.
Code:
def evaluate(code): code = cleanup(list(code)) bracemap = buildbracemap(code) cells, codeptr, cellptr = [0], 0, 0 while codeptr < len(code): command = code[codeptr] if command == ">": cellptr += 1 if cellptr == len(cells):cells.append(0) if command == "<": cellptr = 0 if cellptr <= 0else cellptr - 1 if command == "+": cells[cellptr] = cells[cellptr] +1 if cells[cellptr] < 255 else 0 if command == "-": cells[cellptr] = cells[cellptr] -1 if cells[cellptr] > 0 else 255 if command == "[" andcells[cellptr] == 0: codeptr = bracemap[codeptr] if command == "]" andcells[cellptr] != 0: codeptr = bracemap[codeptr] if command == ".":sys.stdout.write(chr(cells[cellptr])) if command == ",":cells[cellptr] = ord(getch.getch()) codeptr += 1
C'est également un langage Turing-Complet minimaliste élaboré dans le but d'êtreparfaitement compris par un orang-outan. Il fonctionne exactement de la même manière que le BrainFuck, il n'y a que les instructions qui changent.
Voici le tableau récapitulant les instructions et leur comparaison avec le BF :
Quelques exemples :
input → What's this ?
output →
Code:
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. 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.
output →
Code:
ok. 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. 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.
Mêmes input que pour le BrainFuck.
Langage Spoon :
Dérivé lui aussi du BrainFuck ; les instructions ici sont des séquences de 0 et 1.
Voici le tableau récapitulant les instructions :
Quelques exemples :
input → Who's the master Leroy ?
Output →
Code:
1 1 1 1 1 1 1 1 1 100100 010 1 010 1 1 1 010 1 1 1 1 1 1 1 010 1 1 1 1 1 1 1 1 1 1 011011 011 011 000 0011 010 010 010 010 000 000 000 000 000 000 000 000000 000 000 000 000 001010 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 001010 1 1 1 1 1 1 1 001010 000 000 000 000 000 000 000 000 000 000 000 000000 000 000 000 000 000 000 001010 011 011 1 1 1 1 1 1 1 1 1 001010 010 010 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 001010 011 011000 000 000 000 000 000 000 001010 010 010 1 001010 000 000 000 000000 000 000 000 000 000 000 000 001010 000 000 000 001010 011 011001010 010 010 1 1 1 1 1 1 1 1 001010 000 000 000 000 000 000 000000 000 000 000 000 001010 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1001010 1 001010 000 000 000 000 000 000 000 000 000 000 000 000 000000 000 001010 1 1 1 1 1 1 1 1 1 1 1 1 1 001010 011 011 001010 0101 1 1 1 1 1 001010 010 000 000 000 000 000 000 000 000 000 000 000000 000 001010 1 1 1 1 1 1 1 1 1 1 1 1 1 001010 000 000 000 001010 1 1 1 1 1 1 1 1 1 1 001010 011 000 000 000 000 000 000 000 000 000000 000 000 000 001010
Output →
Code:
1 1 1 1 1 1 1 1 1 100100 010 1 010 1 1 1 010 1 1 1 1 1 1 1 010 1 1 1 1 1 1 1 1 1 1 011011 011 011 000 0011 010 010 010 000 000 000 000 000 001010 011 1 1001010 010 010 1 1 1 1 1 1 1 1 1 001010 1 1 001010 000 001010 011011 001010 010 010 000 000 000 000 000 000 000 000 000 000 000001010 1 1 1 1 1 1 1 1 1 1 1 1 001010 000 000 001010 001010 000000 000 000 000 000 000 000 000 000 000 000 001010 1 1 1 1 1 1 1 1 11 1 1 1 001010 000 000 000 000 000 000 000 000 000 000 001010 1001010 1 1 1 1 1 1 1 1 001010 000 000 000 000 000 000 000 000001010 1 1 1 1 1 1 1 1 1 001010 1 1 1 1 1 1 001010 011 011 001010 1 001010
SegFaultProg :
Dérivé du BrainFuck également mais censé le simplifier.
Voici la liste récapitulant les instructions :
> (OPTIONS)
: Incrémente le pointeur mémoire(de OPTION cases)
< (OPTIONS)
: Décrémente le pointeur mémoire(de OPTION cases)
* [ARGUMENT]
: Place le pointeur à l'adresseARGUMENT
+ (OPTIONS)
: Incrémente la valeur de l'octet(de OPTION unités)
- (OPTIONS)
: Décrémente la valeur de l'octet(de OPTION unités)
[
: Commence une boucle
]
: Retour au [ correspondant si lavaleur de l'octet courant est
nulle
.
: Ecrit la valeur de l'octet courantsur la sortie.
,
: Demande une saisie utilisateur
Exemple :
input → Hello world
output →
Code:
*A+H.[-]+e.+7..+3.*B+32.*A+8.-8.+3.[-]+d.
madhat