La dernière fois, nous avons décortiqué l'une des toute premières entrées de l'ioccc, avec un code datant de 1984. Aujourd'hui, nous allons étudier un bout de code nettement plus récent puisqu'il date de 2011, même s'il s'inspire d'une démo datant de l'Amiga (1986 ou 1987) !Rappelons que le but de cette rubrique est de rendre lisible un programme qui a pourtant été écrit de manière à être difficile à lire. Pour ce faire, nous allons petit à petit transformer un code source en un code équivalent, mais de plus en plus facile à déchiffrer.
1. Peter Eastman 2011, Best Ball
1.1 Version initiale
La version originale du programme du jour est la suivante :
#include <stdio.h>
#include <math.h>
#include <unistd.h>
#include <sys/ioctl.h>
main() {
short a[4];ioctl
(0,TIOCGWINSZ,&a);int
b,c,d=*a,e=a[1];float f,g,
h,i=d/2+d%2+1,j=d/5-1,k=0,l=e/
2,m=d/4,n=.01*e,o=0,p=.1;while (
printf("\x1b[H\x1B[?25l"),!usleep(
79383)){for (b=c=0;h=2*(m-c)/i,f=-
.3*(g=(l-b)/i)+.954*h,c<d;c+=(b=++
b%e)==0)printf("\x1B[%dm ",g*g>1-h
*h?c>d-j?b<d-c||d-c>e-b?40:100:b<j
||b>e-j?40:g*(g+.6)+.09+h*h<1?100:
47:((int)(9-k+(.954*g+.3*h)/sqrt
(1-f*f))+(int)(2+f*2))%2==0?107
:101);k+=p,m+=o,o=m>d-2*j?
-.04*d:o+.002*d;n=(l+=
n)<i||l>e-i?p=-p
,-n:n;}}
La première réaction que j'ai eue en voyant ce code a été de me dire qu'il était...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première