# -*- coding: utf-8 -*-
"""

@author: robin
"""

import sympy as sp

def coeffbin(u, v):

    if not v:
        return sp.Integer(1) # Cas de base 1 : v = epsilon (chaîne vide)
    if not u:
        return sp.Integer(0) # Cas de base 2 : u = epsilon (et v != epsilon, car géré au-dessus)

# Décomposition des mots : # u_prime correspond à 'u' dans la formule, 'a' à la dernière lettre, 
                           # v_prime correspond à 'v' dans la formule, 'b' à la dernière lettre
                           
    u_prime, a = u[:-1], u[-1]   
    v_prime, b = v[:-1], v[-1]

    # Terme 1 : coeffbin(u, vb) (Ici 'vb' correspond à la variable v entière de notre fonction)

    terme_1 = coeffbin(u_prime, v)

    # Terme 2 : delta_{a, b} * coeffbin(u, v)
    
    # delta_{a, b} = 1
    
    if a == b:
        terme_2 = coeffbin(u_prime, v_prime)

    # delta_{a, b} = 0

    else:
        terme_2 = sp.Integer(0)

# On retourne la somme en développant le polynôme pour avoir un affichage propre

    return terme_1 + terme_2