Bonjour,
je souhaite réaliser un script qui me remplace des lettres par d'autres après une analyse. Je m'explique.
Dans la langue francais il y a des lettres plus utilisé que d'autres. Voici un array que j'ai réalise :
La lettre E est la plus utilisé, ensuite a, puis s puis I...
Code : Sélectionner tout - Visualiser dans une fenêtre à part @fr = ("E","A","S","I","N","T","R","L","U","O","D","C","P","M","V","G","F","B","Q","H","X","J","Y","Z","K","W");
Dna mon script, l'utilisateur donne un texte crypté de manière mono alphabétique. Je réalise une analyse fréquentielle dessus et je classe les résultats dans un array aussi.
Par exemple la lettres O a été repéré 4 fois, E 3 fois A 1 fois => @g = ("O","E","A");
Je veux maintenant que la lettre O (qui est la plus fréquente) soit remplacé par la lettre E qui est la plus fréquente en fr, que la lettre E soit remplacé par A la deuxième plus fréquente en Fr et ainsi de suite.
Ce principe est les fréquences d'Al Kindi.
J'ai essayé de réaliser une fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 sub replacement { @fr = ("E","A","S","I","N","T","R","L","U","O","D","C","P","M","V","G","F","B","Q","H","X","J","Y","Z","K","W"); @tableau = ("A".."Z"); $texte = $_[0]; $len = length $texte; foreach (@tableau){ $oc = ($texte =~ s/($_)/$1/g); if ($oc != 0){ $resulch{$_} = $oc; } } @g = sort { $resulch{$b} <=> $resulch{$a} } keys %resulch; foreach $varg (@g){ foreach $varfr (@fr){ $texte =~ s/$varg/$varfr/g; } } print $texte; }
Mais évidemment cela ne marche pas a cette endroit :
Je ne vois pas comment m'en sortir. Pourriez vous m'aider ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 foreach $varg (@g){ foreach $varfr (@fr){ $texte =~ s/$varg/$varfr/g; } }
Merci d'avance pour votre aide![]()
Partager