Bonjour !
On travaille en ce moment sur des projets à la fac. Je travaille sur un codage de vigenère :
C'est cool pour l'instant mais on me demande de coder un algorithme en javascript qui puisse, à l'aide d'un test de Friedman, dire si le message codé entré est un vrai message ou non ET la longueur présentie de la clé utilisée pour codée le message.
Sauf que c'est chaud J'ai compris le test en lui-même, enfin la formule mais je vois déjà pas comment le répéter en preantn chaque fois un intervalle de lettres du message codé plus grand de 1 (première fois, on réalise le test pour une clé de longueur 1, on prend toute les lettres du message, puis on test une clé de longueur 2, on prend une lettre sur deux et ceci à l'infini, jusqu'à ce que l'algo s'arrête). Je ne sais même pas comment l'arrêter, on doit normalement se rapprocher d'une valeur, mais je suppose qu'il faudrait à chaque fois afficher la valeur du test à l'utilisateur et lui demander s'il veut tester pour une clé de longueur + 1.
Si quelqu'un me comprends, help, aidez-moi s'il-vous-plaît.
Je n'ai pas été très clair, je ne demande pas à ce que l'on fasse mon travail mais je cherche des éléments me permettant de construire plus facilement ma réponse
Pas compris ton problème, tout est écrit dans ton exercice...
Si tu as une clé de taille 2 alors tu as des groupes de 2 lettres qui vont être décodés de la même manière. Cela ne sert donc à rien de tester toutes les lettres, tester une seule lettre du groupe est suffisant, ce qui revient à une lettre sur 2 dans le cas d'une clé de taille 2.
Tu as juste à faire une boucle sur la taille de ta clé et tu sors de ta boucle quand I > 0.7 et I < 0.8 par exemple.
I varie en fonction de la taille de ta clé.
Pour l'instant j'ai ça.
var messagecode = Saisie() ;
var I = 0 ; //Indice du Test de Friedman
var a = 0 ; // lettres en minuscule = nombre de fois que la dite lettre apparaît dans le message
var b = 0 ;
var c = 0 ;
var d = 0 ;
var e = 0 ;
var f = 0 ;
var g = 0 ;
var h = 0 ;
var i = 0 ;
var j = 0 ;
var k = 0 ;
var l = 0 ;
var m = 0 ;
var n = 0 ;
var o = 0 ;
var p = 0 ;
var q = 0 ;
var r = 0 ;
var s = 0 ;
var t = 0 ;
var u = 0 ;
var v = 0 ;
var w = 0 ;
var x = 0 ;
var y = 0 ;
var z = 0 ;
for (é=1 ; é <= Longueur(messagecode) ; é++){
for (ù = 0 ; ù <= Longueur(messagecode) ; ù++){
if ((messagecode[ù] == 'A') && ( (ù*é) % é == 0 )){
a = a + 1;
}
if ((messagecode[ù] == 'B') && ( (ù*é) % é == 0 )){
b = b + 1;
}
if ((messagecode[ù] == 'C') && ( (ù*é) % é == 0 )){
c = c + 1;
}
if ((messagecode[ù] == 'D') && ( (ù*é) % é == 0 )){
d = d + 1;
}
if ((messagecode[ù] == 'E') && ( (ù*é) % é == 0 )){
e = e + 1;
}
if ((messagecode[ù] == 'F') && ( (ù*é) % é == 0 )){
f = f + 1;
}
if ((messagecode[ù] == 'G') && ( (ù*é) % é == 0 )){
g = g + 1;
}
if ((messagecode[ù] == 'H') && ( (ù*é) % é == 0 )){
h = h + 1;
}
if ((messagecode[ù] == 'I') && ( (ù*é) % é == 0 )){
i = i + 1;
}
if ((messagecode[ù] == 'J') && ( (ù*é) % é == 0 )){
j = j + 1;
}
if ((messagecode[ù] == 'K') && ( (ù*é) % é == 0 )){
k = k + 1;
}
if ((messagecode[ù] == 'L') && ( (ù*é) % é == 0 )){
l = l + 1;
}
if ((messagecode[ù] == 'M') && ( (ù*é) % é == 0 )){
m = m + 1;
}
if ((messagecode[ù] == 'N') && ( (ù*é) % é == 0 )){
n = n + 1;
}
if ((messagecode[ù] == 'O') && ( (ù*é) % é == 0 )){
o = o + 1;
}
if ((messagecode[ù] == 'P') && ( (ù*é) % é = 0 )){
p = p + 1;
}
if ((messagecode[ù] == 'Q') && ( (ù*é) % é == 0 )){
q = q + 1;
}
if ((messagecode[ù] == 'R') && ( (ù*é) % é == 0 )){
r = r + 1;
}
if ((messagecode[ù] == 'S') && ( (ù*é) % é == 0 )){
s = s + 1;
}
if ((messagecode[ù] == 'T') && ( (ù*é) % é == 0 )){
t = t + 1;
}
if ((messagecode[ù] == 'U') && ( (ù*é) % é == 0 )){
u = u + 1;
}
if ((messagecode[ù] == 'V') && ( (ù*é) % é == 0 )){
v = v + 1;
}
if ((messagecode[ù] == 'W') && ( (ù*é) % é == 0 )){
w = w + 1;
}
if ((messagecode[ù] == 'X') && ( (ù*é) % é == 0 )){
x = x + 1;
}
if ((messagecode[ù] == 'Y') && ( (ù*é) % é == 0 )){
y = y + 1;
}
if ((messagecode[ù] == 'Z') && ( (ù*é) % é == 0 )){
z = z + 1;
}
}
I = ( (a*(a-1)) + (b*(b-1)) + (c*(c-1)) + (d*(d-1)) + (e*(e-1)) + (f*(f-1)) + (g*(g-1)) + (h*(h-1)) + (i*(i-1)) + (j*(j-1)) + (k*(k-1)) + (l*(l-1)) + (m*(m-1)) + (n*(n-1)) + (o*(o-1)) + (p*(p-1)) + (q*(q-1)) + (r*(r-1)) + (s*(s-1)) + (t*(t-1)) + (u*(u-1)) + (v*(v-1)) + (w*(w-1)) + (x*(x-1)) + (y*(y-1)) + (z*(z-1)) )
/ ((Longueur(messagecode))*((Longueur(messagecode))-
1)
Return(I);
}
Mais j'ai des erreurs que je ne vois pas. J'ai voulu travailler avec des tableaux mais je ne les maîtrise pas, je sais que c'est bien dégueulasse comme ça mais c'est ma solution, système D.
Je veux sortir de la boucle manuellement parce que je doute pouvoir trouver un intervalle intéressant mais je vais y repenser. Le truc c'est que déjà mon code ne tourne même pas j'ai des erreurs "invalid left-hand side in assignement". Et je ne vois pas bien d'où ça vient. C'est le bordel sans tableau
Toutes ces variables, tout ces "if"...
dieu tout puissant
Roh ça va, je veux pas me destiner à l'informatique. J'aime les variables
Tu aimes les variables, mais tu n'aimes ni la réflexion, ni l'élégance. Évite les métiers scientifiques ou le management :D
S'il te plait...
Du calme les geeks élitistes bon sang, j'ai chié mes tableaux, j'essaye de développer autre chose. Il faut combien d'affront à sa propre estime pour essayer de rabaisser celle des autres comme ça ?
C'est toi-même qui dit que l'informatique est quelque chose que tu fais sous la contrainte... Partant de là, ne t'étonne pas d'avoir des réactions hostiles de personnes exerçant ce métier.
Euh j'ai mal au crâne alors je ne vais pas essayer de comprendre tout ce que tu as fait. Bon je ne sais pas à quoi tu as le droit ou non mais on va commencer par virer toutes tes variables et tes if d'une manière simple :
- si tu as le droit tu vas utiliser les codes ASCII des caractères ainsi tu n'as pas besoin de récréer un tableau
- sinon tu vas créer un tableau avec ton alphabet :
var alpha = ["a", "b", "c", etc.];
Et à partir de là tu fais tout dans des boucles :
initialiser tableau compteur[]
Pour k allant de 0 jusqu'à longueur du message moins 1 par pas de 3
initialiser j à 0
|tant que la lettre du rang k du message est différente de celle du rang j de ton alphabet
||incrémenter j
|ajouter 1 à la valeur de compteur de rang j
Voilà en gros ce que tu peux faire.
Et tu accèdes à tes caractères grâce à l'index de tableau.
Raspberry, ouais j'ai dit que je ne voulais pas faire de l'informatique sans jamais porté un jugement quelconque sur l'informatique en soit, quel petit effronté je fais
Bon, je vais ré-essayer avec des tableaux, merci Eij_iZ, c'est ce que je comptais faire au début mais je ne sais pas comment afficher le contenu d'un tableau, j'ai essayer avec une boucle pour d'afficher les 26 premières cases qui m'intéressent mais je n'y arrivais pas.
for (i=0; i<Tmessage.length; i++) {
| var Omessage += Tmessage[i];
}
Mais bon tout ça tu peux rapidement trouver sur Internet.