Code : Tout sélectionner
unitsize(0.5cm);
string[] alph={"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"};
void cesar(int n=0, string[] T, int j=0) {
for(int k=0; k<26; ++k) {
label(T[(k-n)%26], (k,j), N);
}
}
string[] trans(string[] T, int i, int j) {
string[] T1=new string[T.length];
for (int k=0; k<T.length; ++k) {
if (k!=i && k!=j) T1[k]=T[k];
else {
if(k==i) T1[i]=T[j];
else T1[j]=T[i];
}
}
return T1;
}
string[] permutalea(string[] T) {
string[] T2=new string[T.length];
for (int k=0; k<T.length; ++k) T2[k]=T[k];
for (int k=0; k<T.length; ++k) {
int j;
j=floor(k*unitrand());
if (j != k) {T2=trans(T2, k, j);}
}
return T2;
}
void tableau_de_substitution(int n=0) {
label("\textbf{Texte clair}", (-6.5,n+0.5), E);
label("\textbf{Texte chiffr\'e}", (-6.5,n-0.5), E);
draw((-6.5,n+1)--(25.5,n+1));
draw((-6.5,n)--(25.5,n));
draw((-6.5,n-1)--(25.5,n-1));
draw((-6.5,n-1)--(-6.5,n+1));
for (int k=0; k<=26; ++k) draw((k-0.5,n-1)--(k-0.5,n+1));
}
string codemonoalph(string s, string[] alph, string[] clef) {
string t=s;
for (int k=0; k<length(s)-1; ++k) {
string ss=substr(s, k, 1);
for(int j=0; j<alph.length; ++j) {
if (ss==alph[j]) {
t=insert(t, k, clef[j]);
t=erase(t, k+1, 1);
}
}
}
return t;
}
cesar(alph);
string[] T=permutalea(alph);
tableau_de_substitution();
cesar(T,-1);
label("ainsi la phrase :", (-2,-2));
label("devient :", (20,-2));
string[] s={"\footnotesize UN PETIT ROSEAU M'A SUFFI", "\footnotesize POUR FAIRE FREMIR L'HERBE HAUTE", "\footnotesize ET TOUT LE PRE ET LES DOUX SAULES", "\footnotesize ET LE RUISSEAU QUI CHANTE AUSSSI."};
for (int k=0; k<s.length; ++k) {
string t=codemonoalph(s[k], alph, T);
label(s[k], (0,-k-4));
label(t, (20,-k-4));
}