Un escargot à Manhattan

Carrés magiques

Le musée de Grenoble a fêté ses 20 ans ce week-end, avec actuellement Sigmar Polke à l’honneur. L’une de ses œuvres s’intitule « Carrés magiques I-VII (Saturne, Jupiter, Mars, Soleil, Vénus, Mercure, Lune) », et se compose de figures obtenues en reliant les nombres d’un carré magique d’ordre N dans l’ordre croissant, et ce pour N variant de 3 à 9 :

On peut alors s’intéresser à la génération de carrés magiques d’ordre N. Apparemment, il existe une méthode simple pour le cas N impair, si simple qu’il en existe une implémentation en une ligne de Python :

n=5
print [[(i+j-1+n/2)%n*n+(i+2*j-2)%n+1 for j in range(n)] for i in range(n)]

La page Wikipédia associée présente diverses méthodes plus ou moins compliquées pour le cas N pair, notamment une solution pour N multiple de 4 et une autre solution pour le cas général.

Mais heureusement, l’implémentation des carrés magiques dans le logiciel de calcul numérique Octave est succincte.

Study the magic.m (Figure 2) code and appreciate the wisdom inside this succinct script.

Il existe également une version Python de cette implémentation que l’on peut utiliser pour refaire les dessins de Polke en TikZ. Le code est sur Bitbucket.

À noter qu’il existe aussi un package en R, qui permet de générer des hypercubes magiques de dimension quelconque.