Question 1

Écrire une fonction encode(t) qui encode les valeurs (supposées entières) d'un tableau passé en argument t en retournant un tableau dont les paires successives de valeurs encodent respectivement les valeurs rencontrées (en parcourant le tableau de la gauche vers la droite) et le nombre de répétitions adjacentes de chaque valeur. Ainsi, pour le tableau [1,2,2,2,4,2,4,4,5,6,1,2,3,3] de l'exemple qui suit, la valeur 1 est répétée 1 fois, la valeur 2 est répétée 3 fois (de manière adjacente), la valeur 4 est répétée 1 fois, etc.

print(encode([1,2,2,2,4,2,4,4,5,6,1,2,3,3]));
[1,1,2,3,4,1,2,1,4,2,5,6,1,1,2,1,3,2]

Question 2

Écrire une fonction decode(t) qui effectue l'opération inverse de la question précédante. Ainsi l'appel decode([8,1,2,5]) doit retourner le tableau [8,2,2,2,2,2] car le tableau encode dans cette ordre 1 répétition de la valeur 8 et 5 répétitions de la valeur 2.

Question 3

Écrire un test unitaire qui vérifie le bon fonctionnement de vos fonctions code et decode. Vous générerez à cet effet plusieurs tableaux aléatoires que vos encoderez puis décoderez.

Question 4

Vérifiez ce qu'affiche le code suivant avec vos fonctions code et decode:

print(encode(["a","a","b","c","c",1,1,3,3));

Question 5

Écrire une fonction encryption(texte,cle) qui prend une string en argument, ainsi qu'une clé (une lettre) et qui retourne une string dans laquelle la clé correspond à la lettre e, la lettre suivante à la lettre f, etc. Seuls les caractères entre a et z sont affectés par ce procédé de cryptage. Dans l'appel qui suit, i correspond donc à e, j à f, ..., z à v, a à w, ... et h à d. Vous noterez que les espaces ainsi que la lettre à ne sont pas modifiés car ces caractères ne sont pas entre a et z.

print(encryption("je vais aller à la plage","i"));
fa rweo whhan à hw lhwca

Question 6

Écrire la méthode decryption(texte) qui réalise le décryptage de la chaîne texte en prenant pour clé la lettre entre a et z la plus fréquente dans cette chaîne.