++++++++++[>++++++++++<-]>+++++.-----.+.++++++++.
(Extrait de la conversation pour la création du présent blog)
Il y a beaucoup de langages de programmation, énormément... Tout le monde connait le C++, le Java, parfois même le B ;)
Mais qui connait le Brainfuck ? Le Ook! ? le C- ? 99 ? Le SARTRE ?!
Bon, si le premier est sérieux (si, si), les trois autres le sont un peu moins : le Ook! est identique au Brainfuck en combinant seulement trois lexèmes (Ook! Ook? et Ook.) pour le rendre plus illisible qu'il ne l'est déjà, le C- est un langage qui requiert généralement plus d'instruction que le langage machine pour un même programme, tout programme est valide 99 s'il rend les paroles de la chanson 99 beers, enfin le SARTRE, nommée comme vous vous en doutrez après le philosophe Jean-Paul Sartre... qui contient des type de données du genre en-soi et pour-soi, des instructions comme Life is meaningless... bref du n'importe quoi ! Un petit exemple de programme SARTRE ?Ce magnifique programme considère les implications de son existence. Qui a dit que les programmes ne sont pas intelligents ?!
Nihilator SartreExample2;
Act
IF ;
again ;
No more ; .
Bon soyons plus sérieux maintenant... le Brainfuck ! Brainfuck a été créé à l'origine (sur les traces du langage FALSE) pour pouvoir être compilé avec un compilateur le plus petit possible... il y aurait des compilateurs Brainfuck de moins de 200 octets ! Le langage est donc composé de 8 instructions : > < + - . ,. À noter que ce langage est Turing-complet, c'est à dire qu'il peut calculer toute fonction calculable au sens de Turing (bon, on va pas rentrer dans les détails hein...). En gros, il sait faire autant que C++, Java...
Si ça parait illisible au premier coup d'oeuil (et même au 2e, 3e... bref !), en fait on finit par s'y faire... il suffit d'avoir une bonne vu des listes sur lesquelles on se balade (une qui contient les instructions et l'autre les données). Voyons maintenant l'exemple du résumé :
++++++++++ ajouter 10 dans la case actuelle[ début de boucle : tant que non 0
>++++++++++< ajouter 10 dans la case suivante et revenir à la première case
-] décrementer la case actuelle et retourner au début de la boucle si la case actuelle n'est pas égale à 0
> aller sur la case suivante (qui contient 10*10 = 100)
+++++. ajouter 5 (on a donc 105) et afficher (105 en ASCII est le 'i')
-----. enlever 5 et afficher (100 : 'd')
+. ajouter 1 et afficher (101 : 'e')
++++++++. ajouter 8 et afficher (109 : 'm')
C'est simple en fait ! ;)
Bon, pour faire des programmes un peu plus poussés c'est plus compliqués... Un if then else par exemple...
if x then x = 0 else x = 1
(on est 3 cases avant x, sur une case non attribuée à une variable)
[-]+>>>[[-]<<<][+<<<]-
Explication en pseudo-code :
(ptr = *r// r : registre)
r = 0
r++
ptr += 3// = *x
while (*ptr != 0) do
x = 0
ptr -= 3// = *r
done
while (*ptr != 0) do
x++
ptr -= 3// = *r
done
Sur ce, bon cassage de tête !
Quelques liens :
- liste de langages ésotériques
- concours de langages ésotériques (avec des applications non triviales !)
- un interpréteur Brainfuck en javascript (license GPL)
- quelques exemples de programmes Brainfuck
Aucun commentaire:
Enregistrer un commentaire