def genere_matrice(rle,x,y):
    """
    Transforme le code rle en une matrice de dimension x*y
    param : rle : str
    param : x : int
    param : y : int
    return : list
    >>> genere_matrice("b3o$3o!",4,2)
    [[0, 1, 1, 1], [1, 1, 1, 0]]
    >>> genere_matrice("bo$2bo$3o!",3,3)
    [[0, 1, 0], [0, 0, 1], [1, 1, 1]]
    >>> genere_matrice("2o$2o$2b2o$2b2o!",4,4)   
    [[1, 1, 0, 0], [1, 1, 0, 0], [0, 0, 1, 1], [0, 0, 1, 1]]
    >>> genere_matrice("12ob$2b11o!",15,2)
    [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0]]
    """
    matrice=[]
    caractere_speciaux=["b","o","$","!"]
    ligne=[]
    for i in range(len(rle)):
        
        if rle[i]=="b" and (rle[i-1] not in caractere_speciaux) and (rle[i-2] not in caractere_speciaux):
            ligne+=int(rle[i-2:i])*[0]
        
        elif rle[i]=="b" and (rle[i-1] not in caractere_speciaux):
            ligne+=int(rle[i-1])*[0]
            
        elif rle[i]=="b" and (rle[i-1] in caractere_speciaux):
            ligne+=[0]
                       
        elif rle[i]=="o" and (rle[i-1] not in caractere_speciaux) and (rle[i-2] not in caractere_speciaux):
            ligne+=int(rle[i-2:i])*[1]
            
        elif rle[i]=="o" and (rle[i-1] not in caractere_speciaux):
            ligne+=int(rle[i-1])*[1]
            
        elif rle[i]=="o" and (rle[i-1] in caractere_speciaux):
            ligne+=[1]
            
        elif rle[i]=="$":
            ligne+=(x-len(ligne))*[0] 
            matrice.append(ligne)
            ligne=[]
            
        elif rle[i]=="!":
            ligne+=(x-len(ligne))*[0]
            matrice.append(ligne)
            
    return matrice
    

if __name__ == '__main__':
  import doctest
  doctest.testmod(verbose=True)