Le coin du vieux barbu

Magazine
Marque
GNU/Linux Magazine
Numéro
156
Mois de parution
janvier 2013
Domaines


Résumé
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 auto-documenté : il suffit de le regarder de loin pour voir ce qu'il fait : afficher une sphère ! La deuxième réaction a été de me demander comment un code C aussi petit pouvait en...

Cet article est réservé aux abonnés. Il vous reste 97% à découvrir.
à partir de 21,65€ HT/mois/lecteur pour un accès 5 lecteurs à toute la plateforme
J'en profite


Articles qui pourraient vous intéresser...

Python « moderne » : comment coder en Python en 2020 ?

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
110
Mois de parution
septembre 2020
Domaines
Résumé

Le langage Python évolue progressivement, version après version et de nouvelles fonctionnalités voient le jour et changent la manière dont le langage peut être appréhendé.Au-delà de la curiosité que ces changements provoquent, ils sont des révolutions silencieuses ayant un impact réel sur le style de codage.

Les outils pour les développeurs Python

Magazine
Marque
GNU/Linux Magazine
HS n°
Numéro
110
Mois de parution
septembre 2020
Domaines
Résumé

Pouvoir déboguer son code en toutes circonstances, le tester à chaque amélioration, suivre son utilisation et son bon fonctionnement et être capable d’en optimiser les points faibles.Ce sont des enjeux importants que tous les développeurs connaissent. Voici les outils pour y parvenir.