compter les correspondances

Le
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" ";
}
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #148297
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.

kurtz le pirate
Le #148296
In article 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.



merci nicolas :))

--
klp


Publicité
Poster une réponse
Anonyme