Recursos-LCC

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

View on GitHub

LA2 | Torneio 5 (2022/2023) | Decifrar


"""
Na cifra de Vigenère, dado um texto e uma chave (esta só com letras minúsculas), 
cada letra do texto é cifrada aplicando um desvio correspondente à posição no 
alfabeto da letra respetiva na chave. 
Por exemplo, para cifrar "BoaTarde" com a chave "ola", temos que repetidamente 
aplicar os desvios 14, 11, e 0. Como 'B'+14 == 'P', 'o'+11 == 'z', 'a'+0 == 'a',
'T'+14 == 'H', 'a'+11 == 'a', 'r'+0 = 'r', 'd'+14=='r', e 'e'+11 == 'p', o 
criptograma resultante seria "PzaHlrrp".
Implemente a função que decifra um criptograma cifrado com esta técnica.
"""


def decifrar(texto, chave):
    rep = chave * (len(texto) // len(chave)) + chave[:len(texto) % len(chave)]
    res = []
    for i in range(len(texto)):
        if texto[i].isupper():
            x = (ord(texto[i]) - ord(rep[i].upper()) + 26) % 26
            x += ord('A')
        elif texto[i].islower():
            x = (ord(texto[i]) - ord(rep[i].lower()) + 26) % 26
            x += ord('a')
        else:
            x = ord(texto[i])
        res.append(chr(x))
    return "".join(res)


Testes

# 1
texto = "AyuvfnimkpcfScTsubggmtwnXG"
chave = "python"
> Resultado = "LaboratoriosDeAlgoritmiaII"

# 2
texto = "WkeppetcvftcPoEtgpnkcdFcNqoawvlecz"
chave = "lcc"
> Resultado = "LicenciaturaEmCienciasDaComputacao" 

retroceder