Nous avons toujours l’habitude de donner des numéros uniques à des objets pour les identifier. Et cette règle est encore plus présente dans le développement logiciel. Ce que nous appelons communément Id. Nous utilisons souvent des Int (entier codés sur 4 octets sur la plupart des processeurs) ou encore des long quand nous avons de nombreux objets à identifier et que Int ne nous donne pas la précision nécessaire. Ainsi le premier objet prend l’Id n1, le second l’Id n2 ect.
Certaines personnes utilisent des couleurs pour différencier leur objet dans le développement d’applications visuelles; l’objet rouge, jaune ou gris par exemple. La combinaison RVB (Rouge, Vert, Bleu) a fait ces preuves vu sa popularité… On utilise souvent une graduation sur 1 octet (8bits) pour chacun des composants. Ainsi la couleur {255, 0, 0} est du rouge foncé et {100, 100, 100} du gris moyennement clair. On peut avoir donc exactement 256*256*256 couleurs soit 16 777 216 couleurs différentes pour une graduation sur 8bits. Pour plus d’informations sur le RVB
Il peut y arriver que dans votre super-application vous ayez besoin d’une relation bijective entre votre Id et la couleur de l’objet. En d’autres termes vous aimeriez pouvoir convertir votre Id en couleur RVB et votre couleur en Id de façon unique. Ne me parlez pas d’une simple addition des valeurs de chaque composant RVB car l’application n’est pas ainsi bijective. En effet {255, 45, 0} et {100, 100, 100} ont tous deux la même somme.
Nous voulons donc construire une bijection entre l’ensemble fini des entiers
{1, 2, 3… 100, 101,…16 777 216} et l’ensemble fini des couleurs (graduation sur 8bits pour chaque composant). La solution proposée doit être sous forme de 2 d’algorithmes. Le premier algorithme doit renvoyer une couleur unique en prenant en entrée un entier compris entre [1, 16 777 216], et le second doit faire l’opération inverse.
J’attends vos propositions de solutions. Vous pouvez la publier en tant que commentaire a cet post. La solution sera fourni la semaine prochaine !!!