from copy import copy

## Q3

def tablette(m, n):
    """ tablette pleine à m colonnes et n lignes"""
    pass
    
    
    
## Q4 

# Fonction déjà complète

def affiche(pos):
    n = len(pos)
    # on parcourt les lignes de haut en bas
    # (dernière exceptée)
    for k in range(n-1,0,-1):
        nb_carres = pos[k]
        print('□ '*nb_carres)
    
    # dernière ligne
    nb_carres_comestibles = pos[0] - 1
    print('■ ' + '□ '*nb_carres_comestibles)


# Pour tester : 
# affiche(tablette(5,3))
# affiche([5,4,2])
        
    
## Q5


# On peut décomposer les coups jouables sur la première ligne et ceux des autres lignes


def coups_prem_ligne(pos):
    """Détermine les coups jouables sur la première ligne (tout en bas) """
    coups = []
    
    # Les coups jouables sur la première ligne sont de la forme (j,0) pour j entre 1 et pos[0]
    # -> compléter la boucle suivante
    for j in range()
        coups.append(  )
        
    return coups


def coups_ligne(i, pos):
    """Détermine les coups jouables sur la ligne d'indice i >= 1 """
    coups = []
    
    # plusieurs lignes à écrire (qu'est ce qui change par rapport à la première ligne ?)
    
    
    
    #-----------------
    return coups
    

def coups_jouables(pos):
    # compléter pour initialiser avec les coups de la première ligne
    liste_coups = 
        
    # on complète ensuite avec les coups des autres lignes (pour i >=1)
    n = len(pos)
    # plusieurs lignes à écrire 
    
    
    #-----------------
    return liste_coups
    

## Q6

def enleve_0(pos):
    pass

# pos_test = [4,2,1,0,0,0]
# enleve_0(pos_test)
# print(pos_test)
    
## Q7

def joue(pos, coup):
    n = len(pos)
    (col, row) = coup
    new_pos = copy(pos) # copie de la liste
    
    # lignes à écrire pour modifier cette copie
    
    
    
    # -------------------------
    

# pour tester, décommenter les lignes suivantes (vous devriez avoir les tablettes de l'exemple de début du poly)
     
# pos = tablette(5,3)
# print('Position initiale')
# affiche(pos)
# print()
# for coup in [(3,1), (1,2), (1,0)]:
#     pos = joue(pos_init, coup)
#     print(f'{coup = }')
#     affiche(pos)
#     print()
 
    
## Q8

def gagnante(pos):
    
    if pos == : # seule tablette à 1 carré...
        return False
    
    for coup in coups_jouables(pos):
        # plusieurs lignes à écrire
        
        
        # -------------------------
        
    
    # une ligne à insérer juste après
    
    # -------------------------------
            

# print(f'{gagnante(tablette(3,2)) = }')
# print(f'{compteur=}')
    
    
## Q10

dict = {(1,) : False}

def gagnante_memo(pos, dict):
    t_pos = tuple(pos)
    
    # plusieurs lignes à écrire
   
    
    return dict[t_pos]

        
        
    
    
#### pour aller plus loin

from matplotlib import pyplot as plt
def affiche_matrice(m):
    '''visualisation d'une carte des coups gagnants'''
    plt.imshow(list(zip(*m))[::-1], cmap="spring")
    plt.show()
    
# affiche_matrice(tablette(5, 4))