# coding: latin-1 from carre_magique import CarreMagique def echange (p, i, pos) : # échange de deux éléments d'indice i et pos du tableau p if i != pos : e = p [i] p [i] = p [pos] p [pos] = e def permutation (res, dim, pos = 0, p = None) : # parcours des permutations par récurrence # pour le premier appel à la fonction permutation if p == None : p = range (1, dim*dim+1) if pos < len (p) : # on organise les permutations de l'élément p [pos], p [pos+1], ... for i in range (pos, len (p)) : echange (p, i, pos) permutation (res, dim, pos+1, p) echange (p, i, pos) else : # pos correspond au dernier élément : il n'y a plus de permutation # possible avec les éléments qui suivent # on teste donc le nouveau carré l = [] for i in range (0, len (p)/dim) : l.append ( p [i*dim:(i+1)*dim] ) cm = CarreMagique (l) if cm.est_magique () : res.append (cm) # permutations res = [] permutation ( res, 3 ) # résultats print "nombre de carrés ", len (res) for r in res : print r