Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

compter les correspondances

2 réponses
Avatar
kurtz le pirate
bonjour,

soit le code :

--- begin -------------------------------------------------------------
my $texte="Pour briser le code de Vigénère, il faut d'abord trouver la
longueur de la clé, et pour cela, il faut trouver des répétitions de
plus de 3 lettres dans le document crypté. Ces répétitions sont des mots
qui auront été écrits plusieurs fois et codés par le même morceau de la
clé. Ensuite, il faut mesurer le nombre de lettres entre ces répititions
puis trouver le dénominateur commun de ces différents chiffres, c'est la
longueur de la clé. Maintenant que l'on a la longueur de la clé : n, il
faut découper le texte crypté en n petits texte, de la manière suivante
: la première lettre du texte crypté devient la première lettre du petit
texte 1, la deuxième lettre du texte crypté devient la première lettre
du petit texte 2, et ainsi jusqu'à la n-ième lettre, puis on prend la
(n+1)-ième lettre qui devient la deuxième lettre du petit texte 1,
etc... jusqu'à la fin du texte crypté. Il ne reste plus qu'à faire une
analyse de fréquence des n petits textes, qui nous permettra de trouver
de combien chacun a été décalé. Par exemple, si un petit texte a été
décalé de 2 alors la lettre correspondante de la clé est C.";

my $nbTriplet = length ($texte)-2;


for my $offset (0..$nbTriplet-1) {
my $triplet=substr($texte, $offset, 3);
printf "%5d : $triplet",$offset;
#my @liste_occurences = $texte =~ /$triplet/g;
#printf " - > %4d",scalar @liste_occurences;
print" \n";
}
--- end ---------------------------------------------------------------

tel quel, le script affiche bien les 1113 'triplets'.
si j'active les deux lignes en commentaire, je devrais avoir pour les
1113 triplet, leur fréquences d'apparition. ça marche sauf que ça plante
au 776ème 'a (' avec l'erreur:
Unmatched ( in regex; marked by <-- HERE in m/a ( <-- HERE /

et je ne comprend pas ce que cela veux dire exactement. pourquoi perl
interprète le 'a (' ? il prend la '(' pour le séparateur du m// ?


un petit éclairage ?

--
klp

2 réponses

Avatar
Nicolas George
kurtz le pirate wrote in message
:
printf "%5d : $triplet",$offset;


printf "%5d : %s", $offset, $triplet;

et je ne comprend pas ce que cela veux dire exactement. pourquoi perl
interprète le 'a (' ? il prend la '(' pour le séparateur du m// ?


Le triplet, donc, est « a ( ». Tu es en train d'exécuter :

@liste_occurences = $texte =~ /a (/g;

Cette expression rationnelle est bancale. Cherche quotemeta et Q dans la
doc de perl.

Avatar
kurtz le pirate
In article <46a24683$0$25848$,
Nicolas George <nicolas$ wrote:

kurtz le pirate wrote in message
:
printf "%5d : $triplet",$offset;


printf "%5d : %s", $offset, $triplet;

et je ne comprend pas ce que cela veux dire exactement. pourquoi perl
interprète le 'a (' ? il prend la '(' pour le séparateur du m// ?


Le triplet, donc, est « a ( ». Tu es en train d'exécuter :

@liste_occurences = $texte =~ /a (/g;

Cette expression rationnelle est bancale. Cherche quotemeta et Q dans la
doc de perl.



merci nicolas :))

--
klp