################################################################################
################################################################################
#   JEUX
################################################################################
################################################################################

import  numpy.random as rd


################################################################################
#   FONCTIONS DU JEU
################################################################################


def adversaire(x):
    """adversaire(x:int)->int
    Renvoie l'adversaire du joueur x"""
    return 1-x

def coup_valide(tas,nb):
    """coup_valide(tas:int,nb:int)->bool
    Résultat du test de validité du retrait de nb bâtonnets dans tas"""
    return nb in list(range(1,min(3,tas-1)+1))


################################################################################
#   NIM ALEATOIRE
################################################################################


def nim_alea(N):
    """nim_alea(N:int)->None
    Jeu de Nim contre la machine
    J_0 : joueur
    J_1  : machine
    N : nombre initial de bâtonnets"""
    tas,fini,J_i=N,N==1,1
    while not fini:
        # bascule de joueur à chaque passage
        J_i=adversaire(J_i)
        print("J_"+str(J_i)+"=",tas)
        # si joueur J_0, alors saisie du coup
        if J_i==0:
            valide=False
            while not valide:
                retrait=int(input("Retire="))
                valide=coup_valide(tas,retrait)
                if not valide:
                    print("Coup invalide")
        # sinon, la machine joue (mal)
        else:
            retrait=rd.randint(1,min(3,tas-1)+1)
            print("Retire= ",retrait)
        tas-=retrait
        fini=(tas==1)
    print("J_"+str(J_i)+" gagne")
    


