Énigme à résoudre...

Venez résoudre les pires énigmes....

a marqué ce sujet comme résolu.

Désolé si elle est déjà passé, je me souviens plus trop, elle est plutôt connue mais toujours aussi intéressante :

Un homme se retrouve face à deux portes gardés par deux gardiens, une des portes le mèneras à la gloire, la richesse et le pouvoir, l'autre le conduiras dans les ténèbres et la mort. Il ne peux ouvrir une porte sans être condamné à s'y engager. Les gardiens connaissent les destin de chaque porte. Malheureusement un gardien ment toujours tandis que l'autre dis toujours la vérité.
Vous avez le droit de poser une et une seule question pour trouver la bonne porte !
Quelle est cette question?

Je me souviens avoir entendu cette énigme il y a longtemps, mais j'avais oublié la réponse, après réflexion j'ai trouvé ça :

Je me suis représenté le truc comme ceci :

On donne un nombre, un garde le multiplie par +1 (en disant vrai), et l'autre par -1 (en mentant), il faut donc multiplier les nombres des deux gardes pour être certain de la solution

Donc la réponse est :

"Que me dirait l'autre garde si je lui posais la question ?"

Alors je propose deux énigmes, la première qui est plus un problème que je n'ai pas su résoudre (donc je ne connais pas la réponse), la deuxième est une énigme plus classique pour ne pas briser le topic. Il suffit donc de trouver la réponse à la deuxième pour avoir la main, mais je pense que la première vous intéressera.

Je soumets la première à vos nobles méninges, je suis sûr qu'à nous tous on doit pouvoir faire quelque chose : Je suis invité chez des amis, et arrivés devant la porte de leur immeuble, je me trouve face à un digicode. Bien sûr, dans ma précipitation, je n'ai pas noté le code quand ils m'ont invité, et mon portable est déchargé. Je veux donc "hacker" le code, en testant tout simplement tous les codes possibles. Pour simplifier, disons que je me souviens qu'il y a 4 chiffres et aucune lettre. Bien sûr la solution logique qui vient est de tester comme ceci :

0000

0001

0002

9999

Mais pour que ça soit intéressant, il faut voir que le mécanisme de digicode ne se "reset" pas tous les 4 chiffres, par exemple si je teste 0012 puis 3400, et que le vrai code est 1234, la porte va s'ouvrir (j'aurais bien mis '1234' puisque j'aurais entré '00123400'). La première solution n'est donc pas la plus optimisée (certains codes sont testés plein de fois !).

Deux questions :

a) Existe-t-il une solution optimale où l'on testerait tous les codes qu'une et une seule fois ?

b) Comment peut-on "construire" une suite de chiffres la plus courte possible contenant tous les codes ? Je pense que les meilleurs d'entre nous en programmation auront certainement des idées intéressantes.

L'énigme plus classique maintenant : Le calife Al Nain va mourir, et écrit ses dernières volontés. Il veut que l'on donne toute sa fortune, ses palais, sa bateaux (tout ce qu'il possède en fait) aux pauvres et aux sans-logis, en gardant simplement son troupeau de chameaux, pour que celui-ci soit partagé entre ses trois fils. L'aîné doit hériter de la moitié du troupeau, le second doit en recevoir le tiers et le benjamin le neuvième. Al Nain meurt, et l'on exécute ses volontés. Seulement voilà, il a 17 chameaux (et ce serait dommage de couper un chameau en deux). Comment les partager entre ses fils ?

Pour ta première énigme :

C'est un problème cousin au code de Grey j'ai l'impression. Tu veux trouver une suite de 4 chiffres tel que $u_{n+1}=u_{n_a}u_{n_b}u_{n_c}d$ tel que $d\neq u_{n_d}$ et $\forall i,j \in \{0,.., 9999\}$ avec $i\neq j$ alors $u_i \neq u_j$.

Sur papier j'ai peut-être une technique mais je ne suis pas sur du tout. Je tenterais une petite expérience de programmation peut-être.

Idée naïve :

A chaque préfixe de trois chiffres, on associe un compteur de $0$ à $9$. A chaque fois qu'une préfixe est rencontré, on ajoute comme le chiffre la valeur du compteur actuel et on l'incrémente. Par exemple si on prend comme point de départ : 0000. Le compteur du préfixe 000 valait 0 et maintenant il vaut 1. Ensuite on décale notre fenêtre. On retombe sur le préfixe 000 mais son compteur vaut $1$. Donc on obtient 0001. Le nouveau préfixe à considérer est donc OO1. En itérant ce principe on obtient la suite : 00001000200300 Si l'algorithme donne une solution alors clairement c'est une solution du problème. Maintenant, si l'algorithme ne donne pas de solution pouvons-nous en déduire que le problème n'a pas de solution optimal ?

Je précise au sujet de la première énigme ce que j'ai déjà trouvé :

Pour simplifier à fond le problème j'ai fait un raisonnement où on n'a que 2 symboles possibles (le code n'est composé que de 0 et de 1). Ensuite j'ai demandé à un programme (python) de chercher une suite de chiffres contenant tous les codes possibles de longueur L en faisant varier L (pour que ce soit clair : dans le problème tel que je l'ai posé plus haut L = 4). Et j'ai constaté que quel que soit L, il existait toujours une suite de chiffre contenant tous les codes une et une seule fois. Mais c'est complètement empirique, je ne saurais pas le démontrer ! Et peut-être que ça ne marche qu'avec 2 symboles. En plus ça ne répond pas à la question b.

Idée pour la première énigme (pas sur que ça marche ou que ce soit optimal):

on écrit tous les nombres de 0000 a 9999. On relie entre eux les nombres qui ont 3 chiffres communs, l'un en début du nombre, l'autre a la fin (par exemple 2343 et 3435). On obtient un graphe, et on cherche un chemin eulérien, ie qui passe une seule fois par chaque nombre. On écrit alors la séquence obtenue sur ce chemin en éliminant a chaque fois les 3 chiffres doublons (dans l'exemple on obtient 23435). Après est ce que la théorie des graphes nous donne un outil pour trouver le nombre de chiffres optimal a la main, sans passer par une simulation info?)

Dans tous les cas on se frotte au problème suivante : montrer l'existence de la solution. Ok on a facilement un algorithme pour la calculer mais on a rien qui nous prouve l'existence de l'algorithme.

Peut-être qu'avec ta modélisation looping :

Si on montre que chaque nœud à autant d'arc sortant que d'arc entrant on peut montrer l'existence d'une telle solution.

Edit :

Bon si on construit le graphe de looping, c'est assez facile de démontrer qu'un chemin eulérien existe. Prenons un noeud au hasard $s$. Alors il existe $10$ arrêtes sortantes de $s$ et $10$ arrêtes entrantes vers $s$. Par conséquent il existe un chemin eulérien. En fait mon algorithme est un parcours du graphe de Looping en prenant comme sommet initial 0 et en donnant un ordre sur les arrêtes qui correspond à l'ordre naturel sur les chiffres.

Pour la b :

Si on suit la modélisation par graphe : Il y a 10000 noeuds. A chaque noeud que l'on visite on ajoute un chiffre. Ce à quoi il faut rajouter les chiffres du noeud de départ. Donc si je ne me trompe pas ça fait 10003 chiffres. Si on divise par 4 ça fait 2500 codes à entrer plus trois chiffres.

+0 -0

Pour la b

Saroupille

Tout à fait, et on peut généraliser en nommant $L$ la longueur d'un code et $S$ le nombre de symboles possibles (dans le cas usuel $L = 4$ et $S = 10$), la solution parfaite (si elle existe) est de longueur $S^L + L - 1$.

La solution la moins bonne (du type 0000, 0001, 0002… 9999) est elle de taille $L * S^L$.

+0 -0

Cariopes a trouvé !

Effectivement, c'est la même idée en un peu plus alambiqué.

J'ai un peu peur qu'on ne trouve pas la réponse à l'autre énigme donc je propose qu'on se donne 1 ou 2 jours pour trouver et si on n'a toujours pas de solution, cariopes ou qui voudra prendra la main.

EDIT : Il semblerait que ce soit en fait dans les règles mêmes du topic énoncées par Cirdo

+0 -0

Cariopes a trouvé !

Effectivement, c'est la même idée en un peu plus alambiqué.

J'ai un peu peur qu'on ne trouve pas la réponse à l'autre énigme donc je propose qu'on se donne 1 ou 2 jours pour trouver et si on n'a toujours pas de solution, cariopes ou qui voudra prendra la main.

Le Nain

En quoi la solution n'a pas été trouvé ?

Pour la a) c'est oui. Pour la b) Construire le graphe et faire un parcours eulérien

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte