Principe du quine rotatif

Le script, nommé The Qlobe, est un quine Ruby : il s’affiche lui‑même lorsqu’il est exécuté. La particularité affichée dans l’article est une rotation de 45 degrés à chaque lancement, ce qui implique que huit exécutions successives reproduisent l’image initiale. Le code accepte un entier en argument de ligne de commande pour modifier l’angle de rotation, remplaçant la valeur par défaut v=0000 par la valeur fournie.

Mécanisme d’obfuscation et de décompression

Le cœur du programme est encapsulé dans une chaîne massive passée à eval. Cette chaîne contient du texte ASCII masqué par des caractères de remplissage, puis est nettoyée avec d.gsub!(/"##########.|\s|".*"/,""). Le texte épuré est décodé grâce à require "zlib" et d.unpack"C*", puis chaque octet est transformé par n=(n||"..." )*90+(c-2)%91. Le résultat hexadécimal est reconverti en binaire via [%x%n].pack et finalement décompressé avec Zlib::Inflate.inflate. Cette chaîne de transformations masque la vraie logique tout en conservant un flux de données compressées.

require"zlib"||  "###########";d=d.unpack"C*"
 e=["%x"%n].pack &&"H*";e=Zlib::Inflate.inflate(e).unpack("b*")[0];

Calcul de la rotation et génération d’image

Après décompression, le script crée une matrice de caractères de 360 × 360 pixels. La boucle 22.times{|y| … } parcourt 22 rangées de l’image sphérique, calculant pour chaque ligne la largeur w à l’aide de Math.sqrt(1-((y*2.0-21)/22)**2)*23. Cette formule provient de la projection d’une sphère sur un plan, où le facteur 23 représente le rayon de la sphère en caractères. Un second indice v (l’angle) décale les coordonnées horizontales : u=e[y*z=360,z]*2;u=u[90*x/w+v+90,90/w]. Le comptage de bits noirs dans u détermine le caractère ASCII à placer, via l’expression (""<<32<<".:#")[4*u.count("0")/u.size]. Ainsi chaque pixel dépend directement de la valeur d’angle, ce qui explique la rotation observable à chaque exécution.

Le programme se termine par puts s+";_ The Qlobe", affichant la chaîne finale suivie d’une mention de copyright. L’ensemble du processus combine évaluation dynamique, compression Zlib, arithmétique trigonométrique et manipulation de chaînes pour produire un quine visuel dont la géométrie est contrôlable par un paramètre numérique.