# sinonims

## solució 1: càlcul d'un diccionari de sinònims usant l'esquema aplica

def sinonims_1(llista_linies_sinonims):
    dsin = {}
    for linia_sinonims in llista_linies_sinonims:
        lsinonims = linia_sinonims.split()
        dsin[lsinonims[0]] = lsinonims[1:]
    return dsin

## solució 2: càlcul d'un diccionari de sinònims usant llistes i
## diccionari per comprensió

def sinonims_2(llista_linies_sinonims):
    # Separem les paraules de cada línia
    l_paraules = [linia.split() for linia in llista_linies_sinonims]
    # Calculem el diccionari en què la clau és la primera paraula i el
    # valor, la resta
    dsin = {lsinonims[0]: lsinonims[1:] for lsinonims in l_paraules}
    return dsin

## tria la solució que vols provar
#sinonims = sinonims_1
sinonims = sinonims_2


# corregeix_linia

## solució 1: calcula la línia a partir de la llista de paraules
## corregides. La llista es calcula amb l'esquema aplica.

def corregeix_linia_1(dicc, nlinia, linia_text_incorrecte):
    lti = linia_text_incorrecte.split()
    lpar = []
    for paraula in lti:
        lpar.append(corregeix_paraula(paraula, dicc, nlinia))
    return ' '.join(lpar)

def corregeix_paraula(paraula, sinonims, nlinia):
    if paraula in sinonims:
        lsin = sinonims[paraula]
        r = lsin[nlinia%len(lsin)]
    else:
        r = paraula
    return r

## solució 2: calcula la línia a partir de la llista de paraules
## corregides que és una llista per comprensió

def corregeix_linia_2(dicc, nlinia, linia_text_incorrecte):
    lti = linia_text_incorrecte.split()
    lpar = [corregeix_paraula(paraula, dicc, nlinia) for paraula in lti]
    return ' '.join(lpar)

## tria la solució que vols provar
#corregeix_linia = corregeix_linia_1
corregeix_linia = corregeix_linia_2


# corregeix

## solució 1: Calculem les línies corregides usant l'esquema aplica

def corregeix_1(dicc, text):
    llista_linies_text_incorrecte = text.split('\n')
    llinies = []
    for nlinia, linia_text_incorrecte in enumerate(llista_linies_text_incorrecte):
        linia_corregida = corregeix_linia(dicc, nlinia, linia_text_incorrecte)
        llinies.append(linia_corregida)
    return '\n'.join(llinies)

## solució 2: Calculem les línies corregides usant una llista per comprensió

def corregeix_2(dicc, text):
    llista_linies_text_incorrecte = text.split('\n')
    llinies = [
        corregeix_linia(dicc, nlinia, linia) 
        for nlinia, linia in enumerate(llista_linies_text_incorrecte)
    ]
    return '\n'.join(llinies)

## tria la solució que vols provar
#corregeix = corregeix_1
corregeix = corregeix_2
