3. Définition
Langage de programmation
Notation conventionnelle destinée à formuler des
algorithmes et produire des programmes informatiques qui
les appliquent.
— Wikipédia, Langage de programmation
4. Définition
Ésotérisme
Ensemble d’enseignements secrets réservés à des initiés.
Ce terme est parfois utilisé dans la culture populaire pour
parler de courants de pensée marginaux à composante
secrète ou étrange.
— Wikipédia, Ésotérisme
5. Définition
Langage de programmation ésotérique
• Langages « traditionnels »
– Expressifs
– Puissants
– Simples
– Performants
• Être utile dans des cas pratiques
• Langages « ésotériques »
– Originaux
– Difficiles
– Absurdes
• Repousser les limites de la définition
• Proposer un défi intellectuel
• Faire des blagues entre barbus
9. Brainfuck
• > Pointeur vers la droite
• < Pointeur vers la gauche
• + Incrémenter la valeur
• - Décrémenter la valeur
• . Afficher le caractère
• , Lire un caractère
• [ Sauter après ] si la valeur est 0
• ] Revenir à [ si la valeur est différente de 0
++++++++++[>+>+++>++++>+++++++>++++++++>+
++++++++>++++++++++>+++++++++++>+++++++++
+++<<<<<<<<<-
]>>>>+.>>>>+..<.<++++++++.>>>+.<<+.<<<<++
++.<++.>>>+++++++.>>>.+++.<+++++++.------
--.<<<<<+.<+++.---.
0 0 0 0 0 0 0 0 …
10. Whitespace
• Mémoire classique, registre sous forme de pile
• Instructions regroupées par catégorie
– [Espace] Manipulation de la pile
– [Tab][Espace] Arithmétique
– [Tab][Tab] Accès mémoire
– [Entrée] Conditions, boucles…
– [Tab][Entrée] Entrée / Sortie
• Représentations numériques
– [Espace] 0
– [Tab] 1
– [Entrée] Fin
13. • Le code source n’est pas un texte
Befunge
&>:1-:v v *_$.@
^ _$>:^
& > : 1 - : v v * _ $ . @
^ _ $ > : ^
14. Befunge
&>:1-:v v *_$.@
^ _$>:^
• Le code source n’est pas un texte
& > : 1 - : v v * _ $ . @
^ _ $ > : ^
>v
^<
15. Befunge
&>:1-:v v *_$.@
^ _$>:^
• Une instruction, 4 contextes
• Auto-modifiant
– p(x, y, v) Remplace le caractère (x, y) par v
& > : 1 - : v v * _ $ . @
^ _ $ > : ^
>v
^<
• Le code source n’est pas un texte
18. Piet
• Le code source n’est plus un texte (!)
• 20 couleurs
– 6 niveaux de teintes
– 3 niveaux de luminosité
– Noir et blanc
• Instructions
– Transitions d’une couleur à une autre
• Représentations numériques
– Bloc contigu de n pixels de la même couleur
19. Piet
• Le code source n’est plus un texte (!)
• 20 couleurs
– 6 niveaux de teintes
– 3 niveaux de luminosité
– Noir et blanc
• Représentations numériques
– Bloc contigu de n pixels de la même couleur
• Instructions
– Pointeur
– Transitions d’une couleur à une autre
Lightness change
Hue change None 1 Darker 2 Darker
None push pop
1 Step add subtract multiply
2 Steps divide mod not
3 Steps greater pointer switch
4 Steps duplicate roll in(number)
5 Steps in(char) out(number) out(char)
21. Le boss de fin
('&%:9]!~}|z2Vxwv-
,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-
,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbC
BA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
22. Malbolge
Le boss de fin
('&%:9]!~}|z2Vxwv-
,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-
,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbC
BA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
23. Malbolge
Le boss de fin
• Mémoire sous forme de bande
– Code et données dans le même espace
– Utilise des mots de 10 trits
• Trois registres (un mot chacun)
– C Code
– D Données
– A Accumulateur
('&%:9]!~}|z2Vxwv-
,POqponl$Hjig%eB@@>}=<M:9wv6WsU2T|nm-
,jcL(I&%$#"`CB]V?Tx<uVtT`Rpo3NlF.Jh++FdbC
BA@?]!~|4XzyTT43Qsqq(Lnmkj"Fhg${z@>
24. Malbolge
Le boss de fin
• (C + &C) % 94
• 4, 5, 23, 39, 40, 62, 68, 81
– Exécution de l’instruction
• Si la valeur pointée par C est comprise entre 33 et 126
– Elle est transformée selon la table ci-dessous
• C et D sont incrémentés de 310
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~
5z]&gqtyfr$(we4{WP)H-Zn,[%3dL+Q;>U!pJS72FhOA1CB6v^=I_0/8|jsb9m<.TVac`uY*MK'X~xDl}REokN:#?G"i@