# Exercice 7 : Morpion

g0 = ('x', 'x', 'x', 'o', '_', 'o', 'o', '_', '_')

# Question 1

g1 = ('x', '_', '_', 'x', '_', '_', 'x', '_', '_')
g2 = ('_', 'x', '_', '_', 'x', '_', '_', 'x', '_')

# Question 2

g3 = ('o', '_', '_', 'o', '_', '_', 'o', '_', '_')
g4 = ('_', 'o', '_', '_', 'o', '_', '_', 'o', '_')

# Question 3

g4 = ('o', '_', '_', 'o', '_', '_', 'o', '_', '_')
g5 = ('_', 'o', '_', '_', 'o', '_', '_', '_', '_')

# Question 4

def victoire_verticale(g):
    joueurs = ('x', 'o')
    for j in joueurs:
        if  (g[0] == j and g[3] == j and g[6] == j) or \
            (g[1] == j and g[4] == j and g[7] == j) or \
            (g[2] == j and g[5] == j and g[8] == j):
            return j
    return '_'
    
assert victoire_verticale(g1) == 'x'
assert victoire_verticale(g2) == 'x'
assert victoire_verticale(g3) == 'o'
assert victoire_verticale(g4) == 'o'
assert victoire_verticale(g5) == '_'
assert victoire_verticale(g5) == '_'

# Question 5

def initialisation_grille():
    return ('_', '_', '_', '_', '_', '_', '_', '_', '_')
    
assert initialisation_grille() == ('_', '_', '_', '_', '_', '_', '_', '_', '_')

# Question 6

def jouable(g, n):
    return g[n-1] == '_'

assert jouable(g0, 1) == False
assert jouable(g0, 4) == False
assert jouable(g0, 9) == True

# Question 7

def jouer(g, n, j):
    if n == 1:
        return (j, g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8])
    elif n == 2:
        return (g[0], j, g[2], g[3], g[4], g[5], g[6], g[7], g[8])
    elif n == 3:
        return (g[0], g[1], j, g[3], g[4], g[5], g[6], g[7], g[8])
    elif n == 4:
        return (g[0], g[1], g[2], j, g[4], g[5], g[6], g[7], g[8])
    elif n == 5:
        return (g[0], g[1], g[2], g[3], j, g[5], g[6], g[7], g[8])
    elif n == 6:
        return (g[0], g[1], g[2], g[3], g[4], j, g[6], g[7], g[8])
    elif n == 7:
        return (g[0], g[1], g[2], g[3], g[4], g[5], j, g[7], g[8])
    elif n == 8:
        return (g[0], g[1], g[2], g[3], g[4], g[5], g[6], j, g[8])
    else:
        return (g[0], g[1], g[2], g[3], g[4], g[5], g[6], g[7], j)

assert jouer(g0, 9, 'x') == ('x', 'x', 'x', 'o', '_', 'o', 'o', '_', 'x')
assert jouer(g0, 5, 'x') == ('x', 'x', 'x', 'o', 'x', 'o', 'o', '_', '_')
assert jouer(g0, 8, 'x') == ('x', 'x', 'x', 'o', '_', 'o', 'o', 'x', '_')
