Recursos-LCC

Um arquivo de todo material que consegui reunir, pertinente ao curso de LCC da UM.

View on GitHub

LA2 | Torneio 3 (2021/2022) | Duplica


"""
Implemente uma função que, dado um texto, duplique algumas palavras
por forma a obter o maior texto possível. A única restrição é que
não é possível duplicar duas palavras seguidas.
Caso haja mais do que um resultado possíveis com o mesmo comprimento máximo deve
retornar o menor deles em ordem lexicográfica.
"""


def aux3(texto, pal, pSort, n):
    
    w1 = pSort[:n-1]
    w2 = pSort[:n-2]
    
    res1 = ""
    for i in range(0,n-1):
        res1 += pal[i]+" "
        if (pal[i] in w1) and (pal[i+1] not in w1):
            res1 += pal[i]+" "
    if pal[i+1] in w1:
        res1 += pal[i+1]+" "+pal[i+1]
    f1 = len(res1)
    
    res2 = ""
    for j in range(0,n-1):
        res2 += pal[j]+" "
        if (pal[j] in w2) and (pal[j+1] not in w2):
            res2 += pal[j]+" "
    if pal[j+1] in w2:
        res2 += pal[j+1]+" "+pal[j+1]
    f2 = len(res2)
    
    if f1>f2:
        return res1
    else:
        return res2


def aux(texto, pal, pSort, n):
    
    w2 = pSort[:n-2]
    w3 = pSort[:n-3]
    
    res2 = ""
    for i in range(0,n-1):
        res2 += pal[i]+" "
        if (pal[i] in w2) and (pal[i+1] not in w2):
            res2 += pal[i]+" "
    if pal[i+1] in w2:
        res2 += pal[i+1]+" "+pal[i+1]
    f2 = len(res2)
    
    res3 = ""
    for j in range(0,n-1):
        res3 += pal[j]+" "
        if (pal[j] in w3) and (pal[j+1] not in w3):
            res3 += pal[j]+" "
    if pal[j+1] in w3:
        res3 += pal[j+1]+" "+pal[j+1]
    f3 = len(res3)
    
    if f2>f3:
        return res2
    else:
        return res3


def duplica(texto):
    
    words = texto.split()
    wSortLen = sorted(words, key=len)[::-1]
    t = len(words)
    
    if t==1:
        return texto+" "+texto
    elif t==2:
        for i in range(0,t):
            if words[i]==wSortLen[0]:
                words[i]+" "+words[i]+" "+words[i+1]
            else:
                words[i]+" "+words[i+1]+" "+words[i+1]
    elif t==3:
        return aux3(texto, words, wSortLen, t)
    elif t>3:
        return aux(texto, words, wSortLen, t)


Testes

# 1
texto = "hoje e dia de torneio"
> Resultado = "hoje hoje e dia dia de torneio torneio"

# 2
texto = "gosto muito de programar"
> Resultado = "gosto gosto muito de programar programar"

retroceder