algo de base

algo de base - HTML/CSS - Programmation

Marsh Posté le 21-02-2006 à 16:07:22    

Bonjour à tous,  
 
j'aimerai savoir comment créer un algorithme pour générer tous les codes hexadécimaux de #000000 à #FFFFFF
c'est à dire :  
#00000 #00001 #00002 #00003 ...
 
J'ai fait des boucles et tout le bordel, voyez ce que j'ai fait et marrez vous bien :  
function palette(){
 hexa = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ];
 for(i=0; i<16; i++){
 
  document.write(hexa[i]);
  for(j=0; j<16; j++){
   document.write(hexa[j]);
   for(k=0; k<16; k++){
    document.write(hexa[k]);
    for(l=0; l<16; l++){
     document.write(hexa[l]);
     for(m=0; m<16; m++){
      document.write(hexa[m]);
      for(n=0; n<16; n++){
       document.write(hexa[n]);
      }
     }
    }
   }
  }
 }
}
 
 
heeuuuuu .. pourquoi il plante mon navigateur ??? :bounce:  lol
 
Vous voyez mon niveau en algo maintenant.  
 
Merci !

Reply

Marsh Posté le 21-02-2006 à 16:07:22   

Reply

Marsh Posté le 21-02-2006 à 17:47:22    

Humm comptons le nombre de caractères que ça fait :
 
boucle sur i => 16 * (1 + nbr caractères de la boucke j) = 16 * 1118481 = 17895696
boucle sur j => 16 * (1 + nbr caractères de la boucke k) = 16 * 69905 = 1118480  
boucle sur k => 16 * (1 + nbr caractères de la boucke l) = 16 * 4369 = 69904
boucle sur l => 16 * (1 + nbr caractères de la boucke m) = 16 * 273 = 4368
boucle sur m => 16 * (1 + nbr caractères de la boucke n) = 16 * 17 = 272
boucle sur n => 16
 
1 caractère = 1 octet donc là tu bouffes 17 Mo (normal que ça plante)
 

Reply

Marsh Posté le 21-02-2006 à 18:01:03    

Bidem a bien calculé au vu de ton algo, mais ton algo est faux. Si tu veux afficher toutes les combinaisons possibles alors il faut que t'affiche tous les caractéres du nombre à chaque passage de la boucle intérieure et il ne faut pas en afficher en dehors de cette boucle là.
 
 
Maintenant, tablons sur 256 niveaux par couleur de base (rouge, vert et bleu)
On a donc 16777216 teintes possibles.
Encodé en hexadécimal, il faut 6 caractéres pour le nombre + le diaise et l'espace final donc 8 caractéres en tout par couleur.
 
16777216 * 8 = 134 217 728 caractéres (j'ai rajouté des espaces pour que ca soit plus lisible)
En tablant sur une page encodé en ascii, il faut compter 1 octet par caractére.
Tu mangerais donc 134 217 728 octets soit 131074 kilosoctets soit 128 MegaOctets rien que pour créer ce texte là.
 
A celà, il faut rajouter toute la mémoire que le navigateur consomera rien que pour pouvoir afficher tout ce beau monde.
 
Est ce que t'es sur que ton navigateur sera capable de fournir plusieurs gigaoctets de mémoire à une seule page web?
 
 
 
Finalement, si ca plante, alors c'est plus un probléme de limitation de la machine, (une fois que toute la mémoire est utilisé, elel ne peut pas en fournir plus) de l'os (max 4 Go par programme il me semble) ou du navigateur.

Reply

Marsh Posté le 22-02-2006 à 14:16:48    

Ok, merci pour vos réponses. Je pensais bien sur que le nombre de possibilités sont énormément grandes,
Dans ce cas est il possible de partir sur seulement des couleurs html
 
#000000 > #000033 > #000066 > #000099 > ...
#003300 > #003333 > #003366 > #003399 > ...
...
 
Au niveau de la méthode, ça prendrai quelle genre de tournure ?  
 
Merci beaucoup
 
PS : quand je dis "heeeuuu pk il plante mon navigateur ?" > je sais quand même pourquoi.

Reply

Marsh Posté le 22-02-2006 à 14:21:38    

tynmar a écrit :


PS : quand je dis "heeeuuu pk il plante mon navigateur ?" > je sais quand même pourquoi.


alors pourquoi tu demandes ?

Reply

Marsh Posté le 22-02-2006 à 14:50:53    

Bonjour ritzle,  
 
Tout simplement parceque je suis une quiche en algo et que je sais quand même que si tu mets pas mal de boucles les unes dans les autres ça demande un paquet de ressources.  
 
Il faut commencer par savoir lire. Ma requête porte sur la méthodologie afin d'arriver à un résultat et non pas la solution toute faite.  
Je ne vais pas poster 2 fois le même message, ouvre tes yeux et lis.
 
Au revoir Ritzle.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed