###########################
#       Exercice 1        #
###########################


    
###########################
#       Exercice 2        #
###########################

###########################
#       NIVEAU 1          #
###########################


ALPHABET='ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def position_alphabet(ALPHABET,lettre):
    return ALPHABET.find(lettre)


def cesar(message, decalage):
    resultat = ''
    for lettre in message :
        if lettre in ALPHABET :
            indice = (position_alphabet(ALPHABET,lettre)+decalage)%26
            resultat = resultat + ALPHABET[indice]
        else:
            resultat = resultat+lettre
    return resultat

'''
cesar("WJIEJPM V OJPN. QDQZ GV HVODZMZ IND !",5)
'''

###########################
#       NIVEAU 2          #
###########################

# Décrypter  le message suivant :
message="FJTA CDB EDGIT AP ITRWCXFJT FJT KDJH KTCTO S'JIXAXHTG ?"


for decalage in range(1,26):
    if "VOUS" in cesar(message, decalage):
        print(decalage, cesar(message, decalage))



###########################
#       NIVEAU 3          #
###########################


# Décrypter  le message suivant :
message="I'kyz vgy sgr. HXGBU !  Buay vuabkf vgyykx ga tobkga YAOBGTZ..."

ALPHABET1='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ALPHABET2='abcdefghijklmnopkrstuvwxyz'

def position_alphabet(ALPHABET,lettre):
    return ALPHABET.find(lettre)


def cesar(message, decalage):
    resultat = ''
    for lettre in message :
        if lettre in ALPHABET1 :
            indice = (position_alphabet(ALPHABET1,lettre)+decalage)%26
            resultat = resultat + ALPHABET1[indice]
        elif lettre in ALPHABET2 :
            indice = (position_alphabet(ALPHABET2,lettre)+decalage)%26
            resultat = resultat + ALPHABET2[indice]
        else:
            resultat = resultat+lettre
    return resultat

for decalage in range(1,26):
    if 'Vous' in cesar(message, decalage):
        print(decalage, cesar(message, decalage))

###########################
#       NIVEAU 4          #
###########################

#
# Le nouvel indice n'est plus un simple décalage mais il est obtenu
# de cette façon :
#
# La clé de chiffrement n'est pas un simple décalage mais 
# un couple de deux nombres a et b compris entre 1 et 26.
# On obtient le nouvel indice avec :
# indice = (position_alphabet(lettre)*a +b) %26
#



# Décrypter  le message suivant :
message='Qmnyd, ydvp gdvyzk gzvs-êsmz zaylpnfzm wz smnynluuzm za THQZMpétvmlsé.'


ALPHABET1='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ALPHABET2='abcdefghijklmnopkrstuvwxyz'

def position_alphabet(ALPHABET,lettre):
    return ALPHABET.find(lettre)


def cesar(message, a,b):
    resultat = ''
    for lettre in message :
        if lettre in ALPHABET1 :
            indice = (position_alphabet(ALPHABET1,lettre)*a+b)%26
            resultat = resultat + ALPHABET1[indice]
        elif lettre in ALPHABET2 :
            indice = (position_alphabet(ALPHABET2,lettre)*a+b)%26
            resultat = resultat + ALPHABET2[indice]

        else:
            resultat = resultat+lettre
    return resultat

for a in range(1,26):
    for b in range(1,26):
        m = cesar(message, a ,b)
        if "vous" in m:
            print(a,b, m)

