# -*- coding: utf-8 -*-

import time
import cProfile

 #regarder le temps de chaque fonction à l'aide d'une liste
tempsecoule=[0,0,0]

def hanoi_graph(n):
    """Tour de Hanoi avec rendu graphique"""
    global compt
    L=[[k for k in range(n,0,-1)],[],[]] 
    # contient les listes représentant les piquets 1, 2, 3.
    compt=0 # compteur de coups
    
    #regarder le temps de chaque fonction
    debutaffich=time.time() 
    def afficher():
        """Affichage en fonction du contenu des listes dans L"""
        print('*****')
        for k in (0,1,2):
            ligne="*["+str(k+1)+"]: "
            for j in L[k]:
                ligne+=str(j)
            print(ligne)
        print('*****\n')
    tempsecoule[0]=time.time() - debutaffich
    
    debuthanoi=time.time()
    def hanoi(nb,pos_init,pos_fin):
        """Tour de Hanoi récursif avec affichage"""
        global compt
        if nb!=0:                           
            # Position intermédiaire
            pos_inter=6-pos_init-pos_fin    
            
            # Premier appel récursif
            hanoi(nb-1,pos_init,pos_inter)
            
            # On incrémente le compteur
            compt+=1                        
            
            # On déplace effectivement la pièce
            L[pos_fin-1].append(L[pos_init-1].pop())
            
            # On l'affiche
            print(compt,": Déplacer de",pos_init,"vers",pos_fin)
            afficher()
            
            # Deuxième appel récursif
            hanoi(nb-1,pos_inter,pos_fin)
    tempsecoule[1]=time.time() - debuthanoi 
       
    hanoi(n,1,3)
    print("C'est gagné en",compt,"coups !")

#on compte combien de temps pour la méthode globale    
debutglobal=time.time()  
hanoi_graph(10)
tempsecoule[2]=time.time() - debutglobal

#avec cProfile ...
cProfile.run('hanoi_graph(10)')


print("Le temps ecoule pour la methode globale est ", tempsecoule[2] , "s")  
print("Le temps ecoule pour l'affichage est ", tempsecoule[0] , "s")
print("Le temps ecoule pour 1 coup est ", tempsecoule[1] , "s")