class String def nettoie str=tr('àäâéèêëïîöôùüûÂÄÀÉÈËÊÎÏÔÖÙÜÛçÇ', 'aaaeeeeiioouuuaaaeeeeiioouuucc') return str.upcase.gsub(/[^A-Z]/,'') end def substitution(s) self.tr("ABCDEFGHIJKLMNOPQRSTUVWXYZ",s) end def freq() f={} #Initialisation du hachage "ABCDEFGHIJKLMNOPQRSTUVWXYZ".each_char {|c| f[c]=0} # Pour chaque caractère de la chaîne de caractères à analyser each_char do |c| # Ajoutons 1 à la valeur correspondant à la clé c f[c]=f[c]+1 end # Divisons maintenant le compte obtenu pour chaque lettre # par le nombre total de lettres et multiplions par 100 # pour obtenir un pourcentage v=100.0/self.size f.each_key { |c| f[c]=v*f[c] } return f end def freq_bigrammes f={} 0.upto(self.size-2) do |i| bigramme=self[i,2] f[bigramme]=0 if not f.has_key?(bigramme) f[bigramme]+=1 end return f end def freq_ngrammes(n) f={} 0.upto(self.size-n) do |i| ngramme=self[i,n] f[ngramme]=0 if not f.has_key?(ngramme) f[ngramme]+=1 end return f end end def cesar(dec) str="ABCDEFGHIJKLMNOPQRSTUVWXYZ" str << str[0..dec-1] str[0..dec-1]="" return str end def atbash return "ABCDEFGHIJKLMNOPQRSTUVWXYZ".reverse end def permutation_aleatoire() s="ABCDEFGHIJKLMNOPQRSTUVWXYZ" t="" while s.size > 0 p=rand(s.size) t << s[p] s[p]="" end return t end def inverse(perm) s="ABCDEFGHIJKLMNOPQRSTUVWXYZ" return s.tr(perm,s) end def affiche_frequences(h) t=h.sort_by {|a| a[1]} t=t.reverse t.each {|v| puts "#{v[0]} : #{v[1]}"} t.each {|v| print v[0]} puts end