from collections import deque

#------------------------------------------------
#----------------arène du jeu de Nim-------------
#------------------------------------------------

def nimRec(etatJeu,areneNim):
    joueur2=tuple([1-etatJeu[0]]) #tuple à un élément
    contenu=list(etatJeu[1:]) #liste pour modifier 1 case
    etatsSuivants=[]
    for i in range(len(contenu)):
        contenuActuel=contenu[i]
        for j in range(contenuActuel):
            contenu[i]=j
            etat=joueur2+tuple(contenu)
            etatsSuivants.append(etat)
            if etat not in areneNim:
                nimRec(etat,areneNim)
        contenu[i]=contenuActuel #remise en état antérieur
    areneNim[etatJeu]=etatsSuivants

def grapheNim(effectifs=(1,3,5,7)):
    etatJeu=(0,)+effectifs
    areneNim=dict()
    nimRec(etatJeu,areneNim)
    etatJeu=(1,)+effectifs
    nimRec(etatJeu,areneNim)
    return areneNim

#------------------------------------------------
#-------------------analyse de jeu---------------
#------------------------------------------------

def controle(etat):
    return etat[0]
    
def joueurPrecedent(etat):
    return 1-etat[0]

def nombreAretes(arene):
    pass
    
def estBiparti(arene):
    pass
  
#------------------------------------------------
#-------------------fin du jeu-------------------
#------------------------------------------------

def jeuTermine(arene,etat):
    pass

def estGagnantNim(arene,etat,joueur):
    #règle de Nim ordinaire
    #le gagnant est celui qui retire le dernier pion
    pass
      

#------------------------------------------------
#-------------attracteur version simple----------
#------------------------------------------------


def initialiseAttracteur(arene,joueur):
    pass
        
def unSuccesseurDansA(arene,etat,attr):
    pass

def tousSuccesseursDansA(arene,etat,attr):
    pass

#------------------------------------------------
#------attracteur rapide ------------------------
#------------------------------------------------


def initialise(arene):
    pass

def attracteur(arene,joueur):
    pass
    
def strategie(arene,joueur):
    pass
    
#------------------------------------------------
#--------------test sur jeu de Nim---------------
#------------------------------------------------
    
def representeEtat(etat):
    for i in range(1,len(etat)):
        print("L",i,":",etat[i],"allumette(s)")
    
def predireVainqueur(etat,arene,joueur):
    attr=attracteur(arene,joueur)
    strat=strategie(arene,joueur)
    if etat in attr:
        if controle(etat)==joueur:
            print("Joue et gagne en",attr[etat],"coup(s)")
            print("Premier coup",strat[etat])
        else:
            print("Gagnera en",attr[etat],"coup(s)")
            print("au pire quoi que joue l'adversaire")
    else:
        print("N'est pas sûr de gagner")

def vainqueurNim(joueur,etat=(0,1,3,5,7),init=(1,3,5,7)):
    areneNim=grapheNim(init)
    return predireVainqueur(etat,areneNim,joueur)
  
  

