Bonjour,
Dans le cadre d'un exercice (disponible ici ), mon but est de décoder le codage de Vigenere.
Je voudrais que vous m'aidiez à comprendre l'énoncé et me dire si mes procédures sont correctes. J'ai réussi à faire les 8 premieres questions sans probleme.
Pour les 5 dernieres, je ne comprends pas tres bien l'énoncé : s'il y a par malheur une repetition de 3 caracteres qui ne provient pas d'une repetition de 3 caracteres dans le texte initial, alors on trouvera tres certainement un pgcd de 1. D'autant que le texte est supposé suffisament long, donc il y a de grandes chances qu'une erreur de ce type existe. J'ai vérifié cette loi expérimentalement, et je trouve un pgcd de 1. Si vous comprenez l'énoncé mieux que moi, merci de m'aider.
Sinon, voici les procédures que j'ai créées, dites moi si ça va ou pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 let pgcdDesDistancesEntreRepetitions t' n i= let res=ref 0 and i0=t'.(i) and i1=t'.(i+1) and i2=t'.(i+2) in for j=i+3 to n-3 do if ( t'.(j)=i0 && t'.(j+1)=i1 && t'.(j+2)=i2 ) then res:=(pgcd (!res) (j-i)) done; !res;;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 let longueurDeLaCle t' n = let res= ref 0 in for i=0 to n-3 do res:= pgcd (!res) (pgcdDesDistancesEntreRepetitions t' n i) done; if !res=0 then failwith "texte trop court. pas assez de repetitions pour determiner la longueur de la clé" else !res;;
Voilà, merci pour votre aide.
Partager