Sésame, ouvre-toi

Voici un nouvel exercice tiré du http://www.animath.fr/IMG/pdf/ofm-2012-2013-envoi2.pdfdans la discussion Test d'entrée à l'Olympiade...
Exrcice 8 a écrit:
Un digicode s’ouvre dès qu’on fait l’unique combinaison correcte de 4 chiffres (qui peut éventuellement contenir des répétitions). Par exemple, si l’on tape la suite des chiffres 000125 le digicode
s’ouvrira si le code est soit 0001, soit 0012, soit 0125.
Petit Pierre ne connaît pas le code. Combien de chiffres au minimum doit-il taper pour ouvrir le digicode à coup sûr ?

Pour s'attaquer à ce type de questions, on a souvent intérêt à essayer de voir comment ça fonctionne sur un modèle plus petit
Ainsi, j'ai essayé de traiter le cas de codes à 3 chiffres dans un sytème de numération de base 4
Il y a alors 64 combinaisons digicode possibles, et j'ai trouvé une "clé universelle" de 66 chiffres, ce qui est optimal, parce que dans unel iste n éléments on ne peut choisir que (n-2) groupes distincts de trois éléments consécutifs.
Voici cette clé:
0010020030110120130210220230310320331121131221232132223133233300

Pour composer cette clé, j'ai appliqué l'algorithme suivant:
Sésame a écrit:
je commence par 000, puis chaque fois que j'ajoute un chiffre,
je le choisis le plus petit possible, mais de sorte que les trois deniers chiffres composent le plus petit nombre qui n'ait pas encore été listé.
J'ai été obligé de déroger à cette règle quelques fois fois (chiffres rouges), car, par exemple, 300 induisait deux zéros consécutifs et 000, 001, 002, et 003 étaient déjà listés.
Par chance(?) la suite balaye toutes les combinaisons de 3 chiffres choisis parmi 0,1,2,3.

Pour le problème original, j'imagine qu'un algorithme de ce genre sera reconductible, même règle avec des exceptions, ce qui donnerait alors un Sésame de 10 003 chiffres.

Mais comment puis-je prouver que cette clé existe effectivement sans l'écrire et l'examiner?

[ Edit: Message corrigé ce matin: plusieurs exceptions à la règle]

Réponses

  • D'ailleurs, il n'y a plus d'exception à la règle si on commence l'écriture de la clé par
    330001002003011... pour le problème réduit.

    Par analogie, je propose donc la solution suivante pour le problème original
    Sésame a écrit:
    Je commence par écrire 999, puis chaque fois que j'ajoute un chiffre, je le choisis le plus petit possible, mais de sorte que les quatre derniers chiffres composent le plus petit nombre qui n'ait pas encore été listé.
    Ce qui donne: 999000010002000300... 00090011001200 etc.

    Mais comment prouver, sans l'écrire in extenso, que cette suite de chiffres balayera tous le nombres de {0000; ... ;9999} sans répétition ?
  • Bonjour,

    il me semble me rappeler que si les nombres sont placés circulairement, on appelle ça des roues à mémoire ....
    ça vous dit quelque chose ?

    bien cordialement

    kolotoko
  • Bonjour,

    Un lien intéressant sur la question : http://stefangeens.com/2004/10/the-de-bruijn-code/
    (en anglais)

    Cordialement,
    rosab
  • Merci à tous deux.

    My english speaking is unfortunately very bad.
    Cependant, le problème est maintenant référencé: il s'agit du Code (ou Suite) de de Bruijn.

    Je récris ci-dessous la solution du problème réduit (nombres à 3 chiffres en base 4) généré par mon Sésame, pour vérification:
    33000100200301101201302102202303103203311211312212321322231332333

    Je reste intimement convaincu qu'il foncionnera aussi pour les nombres à 4 chiffres en base 10, il me reste à le prouver. :S
  • Voici le lien vers un document pdf qui devrait répondre à tes attentes: Un problème de digicode
  • Merci Greg,

    Du coup, j'ai déplacé la discussion vers "Combinatoire et Graphes".
    Je n'avais pas vu la relation avec les graphes orientés.

    Cependant, en épluchant le document english mis en lien par rosab, j'ai pu lire ceci:
    Stefan Geens a écrit:
    "A Swedish blogger! Hakan Kjellerstrand has a page up with a much faster algorithm for generating de Bruijn sequences. He even singles out the specific solution for Stockholm door-code keypads"
    ...et un clic sur le lien nous fournit une suite de 10 000 chiffres.
    Il me semble bien que si on la fait précéder de 999, on obtient la suite générée par mon Sésame. Bingo !

    Mais je ne sais toujours pas prouver qu'elle balaye tous les codes à 4 chiffres. Faudra sans doute que j'étudie de façon plus approfondie le lien avec les graphes orientés.
    @ suivre. jacquot
Connectez-vous ou Inscrivez-vous pour répondre.