Niveau :      
Résumé :

Petit problème pour le plaisir.

Problème

Nous voulons créer un algorithme, voire une formule arithmétique simple, nous permettant de générer des nombres entiers ayant la propriété suivante : pour tout x, l'ensemble des chiffres de l'ensemble des nombres générés inférieurs à x doit être distribués équitablement.

Équitablement signifie que chaque chiffre doit apparaître autant de fois que chaque autre plus ou moins le nombre de chiffres de x.

Prenons un exemple pour bien me faire comprendre :

  • Soit x = 100
  • Prenons l'ensemble des nombres entiers inférieurs à x : 0-99
  • Écrivons les sur 2 chiffres (1=01) et prenons tous les chiffres

Nous avons alors 20 fois le chiffre 0 (10 fois coté dizaines, 10 fois coté unités), 20 fois le 1 ...

Donc c'est équilibré, nous sommes contents.

Prenons x = 99, nous avons tous les nombres sauf 99, donc 20 chiffres de chaque sorte et seulement 18 fois le 9. Deux de moins que les autres or 2 est le nombre de chiffres de x.

Donc c'est équilibré, nous sommes contents.

Prenons x=90, nous n'avons que 9 fois le 9 et 19 fois le 0, ce n'est pas équilibré.

Par conséquent la formule que nous cherchons c'est pas f(x)=x mais quelque chose qui prend une suite logique de nombres mais pas dans l'ordre naturel, comme le fait le code de gray.

Mais pourquoi ?

Pendant que vous réfléchissez, je vais vous expliquer la raison du problème. Lorsque vous câblez une salle machine, vous utilisez de nombreux câbles. Pour une bonne gestion de ces câbles, qui vont rapidement être emmêlés avec d'autres une fois branchés, il faut les identifier pour repérer facilement les 2 bouts d'un même câble.

Une première solution est d'utiliser patchsee, sympa quand on a les moyens et qu'on n'a encore installé aucun câble, mais elle ne marche pas pour notre stock de câble existant.

Une autre solution est d'étiqueter les câbles, mais les étiquettes papier même plastifiées ont tendance à s’abîmer, s'effacer et sont difficilement repérables de loin. On les remplace donc parfois par des clips de repérage.

Malheureusement, nous sommes soumis à la terrible loi de Benford. Appliquée au clips, elle nous condamne a acheter beaucoup de 1, un peu moins de 2, encore moins de 3 etc ... Or ils sont vendu par lots ayant la même quantité de chaque chiffre, drame lorsque vous voulez étiqueter 200 ou 2000 câbles.

La solution : répartir les chiffres de façon à n'acheter que ce que vous consommez. C'est ce que que j'ai décrit d'une façon un peu plus formelle précédemment.

La réponse

Alors vous avez réfléchi ?

Évitez de vous précipiter sur la solution, elle est simple et vous pouvez la trouver.

J'ai dû faire plusieurs essais et quelques calculs pour trouver.

Il y a plusieurs solutions.

Mais très peu de solutions sont simples et faciles à expliquer à celui qui devra utiliser ce système après vous.

La solution que je propose ne nécessite pas de formule compliquée.

Vous avez trouvé ?

Voici ma solution :

  • 00, 11, 22, 33, 44, 55, 66, 77, 88, 99
  • 10, 21, 32, 43, 54, 65, 76, 87, 98, 09
  • 20, 31, 42, ...

Vous voyez le pattern ?

A un nombre à 2 chiffres N=(x)(y) j'associe le nombre M=(x+y)(y) en ne gardant qu'un seul chiffre à chaque opération bien sûr. A un nombre à 3 chiffres N=(x)(y)(z) j'associe le nombre M=(x+y+z)(y+z)(z) etc.

  • Pour faire le 35e nombre je prends le 5 (.5) j'ajoute 3 et je mets le résultat à gauche : 85
  • Pour faire le 125e nombre je prends le 5 (..5) j'ajoute 2 et je mets le résultat à gauche (.75) j'ajoute 1 et je mets le résultat à gauche : 875
  • Pour faire le 589e nombre je prends le 9 (..9) j'ajoute 8 et je mets le résultat à gauche (.79) j'ajoute 5 et je mets le résultat à gauche : 279

Les nombres sont équilibrés car pour chaque série de 10 on a 10 chiffres différents aux unités, 10 chiffres différents aux dizaines ...

De plus ça marche pour le nombre de chiffres que vous voulez, vous pouvez étiqueter 25000 câbles avec cette méthode. Et Vous pouvez même changer de nombre de chiffres en cours de route, coder les 100 premiers nombres sur 2 chiffres et les 900 suivants sur 3 chiffres comme avec les entiers naturels.

Conclusion

Il n'y a pas de petites économies !

D'ailleurs, à ceux qui utilise le codage des nombres naturels, je récupère gracieusement tous les 7, 8 et 9 dont vous n'avez plus usage ! Il me suffira d'adapter le codage en base 3 pour les réutiliser.

Les maths c'est utile parfois ...