Trouverez-vous une solution rapide et ingénieuse à ce problème ?
Salut à vous, internautes férus d’énigmes chiffrées et de mystères codés !
Voici un petit problème – pas tout à fait une énigme – dont j’ai conçu plusieurs variantes. Sa grande qualité : il s’énonce en peu de mots. En revanche, sa résolution n’est pas forcément simple… Je n’ai pas encore trouvé de façon rapide et ingénieuse d’en venir à bout, sur un simple coin de nappe.
Je serais curieux de connaître votre méthode pour l’élucider ! Les commentaires vous sont ouverts.
Marcel discute avec Bob :
Marcel – Si l’on additionne nos âges, le total s’écrit exclusivement avec des chiffres présents dans nos âges. Des chiffres différents (c’est-à-dire qu’aucun chiffre n’est répété)*.
Bob – C’est également vrai si l’on soustrait ton âge au mien ! Le résultat s’écrit exclusivement avec des chiffres présents dans nos âges. Des chiffres différents.
Quels sont les âges de Bob et de Marcel (sachant que tous deux ont moins de 100 ans ?)
* Cette somme ne peut donc être ni 77, ni 101, ni 133, car un même chiffre y est présent deux fois. Un même chiffre peut apparaitre dans les deux âges mais pour autant, il ne peut pas apparaître deux fois dans le résultat de l’addition. Ni, comme le précisera Bob, dans le résultat de la soustraction. Précisons enfin pour les petits futés qu’aucun âge ne s’écrit avec un zéro à gauche (012, 045….), et que les âges de Bob et de Marcel sont des nombres entiers (pas d’âges « à virgule » !). Dernière remarque utile : la différence des âges donne un nombre qui s’écrit avec des chiffres (et non un seul).
Exemple : si Bob avait 47 ans et Marcel 25, la somme de leurs âge serait 72 ans, qui s’écrit bien exclusivement avec des chiffres parmi 2,5,4 et 7, et ne présente pas deux fois le même chiffre. Mais la différence des deux âges vaut 22 : si ce nombre est bien composé de chiffres parmi 2,5,4 et 7, le chiffre 2 y est répété, ce qui ne convient pas.
Bob = 80
Marcel = 24
Différence = 56
@alain…vous n’avez rien compris je crois!
Bob : 28
Marcel : 14
Addition : 42
Soustraction : 14
Je me suis dit que 1 : plus facile avec des petits chiffres et
2 : ce doit etre possible d’obtenir un des 2 ages avec la soustraction, il restait juste à trouver l’addition
Bien joué! mais il doit y’avoir un raisonnement à trouver pour prouver qu’il n’y a qu’une seule réponse (enfin je suppose qu’il n’y en a qu’une)
Un algo rapide confirme le 28 et 14, et c’est la seule solution.
Sûr, mais… Comment résoudre l’énigme sans ordinateur, sur un coin de nappe ? That is the problem…
Mais le 14 ne comprend pas de chiffre composant l’âge de Marcel lors de la soustraction
Bob a 10 ans
Marcel a 9 ans
9+10=19
10-9=1
9
10
Le différence des ages doit donner DES chiffres et non un seul…donc 10 ans et 9 ans ne marche pas
Aller …. J’étais contant avec 10 et 5.
Intéressant:
– Si on traduit l’énoncé, on déduit que l’âge de Bob est supérieur à celui de Marcel et qu’a fortiori Bob est âgé d’au moins 10 ans de plus que Marcel.
– Si on considère que l’âge de Bob est égal à a*10 + b et celui de Marcel à a’*10+b’ avec a et a’ compris entre 0 et 9 et b compris entre 0 et 9, on trouve que, pour les paramètre (a,b) et (a’,b’) donnés et différents, il y a au maximum 24 possibilités de somme égale à nombre supérieur à 100 s’écrivant avec 3 chiffres différents parmi ceux-ci, et 12 pour une somme inférieure à 100.
– S’agissant de la différence, il y a 12 possibilités (la différence est nécessairement à deux chiffres) à supposer les paramètres soient tous différents.
– Comme la différence entre Bob et Marcel donne un nombre, a et a’ sont nécessairement différents
– On a donc seulement le cas ou b=b’ qui est un cas limite. Dans ce cas, il y a 6 possibilités différentes lorsque la somme est supérieure à 100 et 6 lorsque celle-ci est inférieure à 100.
Ceci étant dit, il me semble qu’il reste pas mal de combinaisons à tester en utilisant un système d’écriture en base 10 (un tableur pourrait faire l’affaire), mais je ne vois pas de méthode de résolution « facile ».
Comment arrive tu à dénombrer les 24 possibilités supérieures à 100 dans l’addition, les 12 inférieures, etc ?
14 et 28 m’ont l’air de bon candidats
Et se sont les seuls qui remplissent les contraintes pour tous les ages de 1 à 99 pour bob & marcel
Sans considérer les contraintes de * on a :
Trouvé : marcel=5 bob=10 somme=15 diff=5
Trouvé : marcel=9 bob=10 somme=19 diff=1
Trouvé : marcel=10 bob=5 somme=15 diff=5
Trouvé : marcel=10 bob=9 somme=19 diff=1
Trouvé : marcel=14 bob=28 somme=42 diff=14
Trouvé : marcel=17 bob=24 somme=41 diff=7
Trouvé : marcel=24 bob=17 somme=41 diff=7
Trouvé : marcel=25 bob=27 somme=52 diff=2
Trouvé : marcel=27 bob=25 somme=52 diff=2
Trouvé : marcel=28 bob=14 somme=42 diff=14
Trouvé : marcel=38 bob=46 somme=84 diff=8
Trouvé : marcel=45 bob=49 somme=94 diff=4
Trouvé : marcel=46 bob=38 somme=84 diff=8
Trouvé : marcel=49 bob=45 somme=94 diff=4
Trouvé : marcel=50 bob=51 somme=101 diff=1
Trouvé : marcel=51 bob=50 somme=101 diff=1
Si on ajoute la contraire de la différence sur un seul chiffre il ne reste qu’une possibilité
Marcel a 14 ans et Bob 28 ans
La somme de leur âges est de 42 ans
Si tu soustrais 28 à 14 tu trouves
14
Le plus simple reste de faire un programme informatique. On n’obtient effectivement qu’une seule solution.
Est-ce que la solution passerait par « Bob a toujours le double de l’âge de Marcel et que l’âge de Bob soit égal ou supérieur à 20 et au maximum égal à 66 ans ?
bob= 28 , marcel= 14
la méthode (peu glorieuse je l’avoue) a été de tester toutes les combinaisons possibles avec un script sous python…
Il n’y a effectivement qu’une solution (celle donnée ci-dessus, 28 et 14) en prenant toutes les hypothèses énoncées.
Un petit programme informatique permet de balayer toutes les combinaisons en un rien de temps.
Ce problème ne tient pas la route.
Bob ne peut pas avoir 28 ans et Marcel 14 ans ! En posant comme hypothèse que Bob est le diminutif de Robert, ce ne sont pas des prénoms de personnes nées en 2001 et 1987. Ils sont forcément plus vieux… avant-guerre peut-être.
En revanche, la solution (14,28) colle avec les prénoms Lucas et Nicolas. Pierre et Cédric. Kévin et Laurent.
Alors là elle est bien bonne Lagarde. Voilà une réflexion qui mérite d’être encadré. M’a bien fait rire et j’imagine que c’était le but ! Bravo !!!
A mon avis il a choisi des prénoms qui sont aussi des vêtements…
En effet ! 🙂
Je n’ai pas précisé à quelle date s’est tenu cet échange ! Mais vous êtes fin prêt pour une énigme qui dort depuis quelques mois dans mes tiroirs… A paraître sous peu ! 🙂
Robert = 14 ans, et marcel 28 ans.
Total = 42 ans.
Différence = 14 ans.
Ce problème mêle arithmétique et probabilités. Il s’agit, en additionnant ou soustrayant des nombres dont les chiffres peuvent être tous différents (ou non), d’obtenir un résultat dont les propres chiffres sont différents entre eux mais appartiennent à l’ensemble des chiffres donnés au départ. La base 3 (0,1,2,3) est le système minimal qui permet de réunir ces conditions. Peut-être pourrait-on ainsi déterminer une solution générique.
Le couple-solution en base 10 (28,14) ne fonctionne pas en base 3 (ou 14 s’écrit 111), mais il fonctionne en base 5 avec le couple (103, 24), avec une somme de 132.
Il s’agirait in fine d’analyser les tirages de chiffres sans répétition issus d’opérations entre 2 termes exprimés sous la forme : (x * B exp (n)) + (y * B exp (n-1)) + (…) + (z * B exp 0). Ici en base « B » donc.
Ce ne sont que de modestes propositions de pistes…
Merci, j’y vois beaucoup plus clair à présent…
Merci, vu comme ça c’est effectivement limpide, on se demande pourquoi personne n’y a pensé
Marcel est un petit génie et parle déjà
Bob = 10
Marcel = 0
Bob + Marcel = 10
Bob – Marcel = 10
Bonjour,
Moi j’ai choisi les nombres 60 et 5.
Mais c’est la seule possibilité en prenant une dizaine comme premier nombre.
N’empêche qu’avec leur différence d’âge, je me demande vraiment comment ils en sont arrivés à cette discussion.
Malheureusement 60-5=55 … soit 2 fois le même chiffre …
def inSet(ch,plu):
oui=True
for c in str(ch):
if not c in str(plu):
oui=False
return oui
for am in range(1,100):
for ab in range(am,100):
pl=am+ab
ms=ab-am
if((len(set(str(pl)))==len(str(pl))) and
(len(set(str(ms)))==len(str(ms))) and
inSet(pl,str(am)+str(ab)) and
inSet(ms,str(am)+str(ab))):
print(am,ab,pl,ms)
petite solution en python
Marcel + Bob = bronzage camionneur
Marcel – Bob = insolation en prime
J’espérais bien que quelqu’un remarquerait ! ^^ (merci pour l’équation, au passage 😉 )
Marcel a 0 an, ça marche avec n’importe quel age de Bob , sauf 11, 22, 33 etc…
Comme d’autres, j’ai facilement trouvé 14 et 28 en écrivant un bout de programme utilisant la force brute: pour chaque couple d’ages possibles (plus de 4000) vérifier les conditions. Ca marche mais ça manque d’élégance!
Tentative d’explication :
Partons de la soustraction si l’âge de Robert s’écrit AB et celui de Marcel ab
la solution de la soustraction peut s’écrire sous les formes suivantes :
AA : impossible par énoncé
AB : « ab »= »00 » => tous les cas où Marcel a 0 ans et Robert 10 ans ou plus sont bons (vérifié dans l’addition : « AB+00=AB »)
Aa : a=0 => B=b => »AB-0B=A0″=> je ne peux retrouver mon 0 de la solution que dans les cas ou B=0 => b=0 => Marcel a 0 ans …. cf supra
Ab : a=0 => « AB-0b=Ab » => b (Bb) € {(2,1),(4,2),(6,3),(8,4)}
on repasse à l’addition : comme a=0 l’addition se résume à
(2,1) : A2+1=x3 => A = 3 (pour retrouver mon 3) => x=3=> faux par énoncé
(4,2) : A4+2=x6 => A =6 (pour retrouver mon 6) => x=6=>faux
(6,3) : A6+3=x9 => A=9 => x=9=>faux
(8,4) : A8+4=y2 => A=2 => y= 3 => on ne retrouve pas 3 dans 28+4
aA : A=2a et a (Aa) € {(2,1),(4,2),(6,3),(8,4)} et B>b
on repasse par l’addition :
(2,1) : « 2B+1b=xy » =>x€(3,4)
si x=3 : B ou b=3 => y€(1,2,3)&y€(b+3,B+3) impossible
erreur de bouton … mais ca commence à faire long de tout écrire ….. ça doit être plus simple que ça …
Donc acune méthode pour trouver la solution (14/28) sans programme informatique ?
Un ami mathématicien, utilisateur du logiciel Mathematica, a trouvé la solution en écrivant ces quelques lignes de code :
test[{b_, m_}] := (bm =
IntegerDigits[b]~Union~IntegerDigits[m] // Sort;
bpm = IntegerDigits[b + m] // Sort;
bmm = IntegerDigits[b – m] // Sort;
bpm == Union@bpm && bmm == Union@bmm &&
bpm~Intersection~bm == bpm && bmm~Intersection~bm == bmm);
t = Table[{b, m}, {m, 1, 99}, {b, m + 10, 99}] // Flatten[#, 1] &;
Select[t, test]
{{28, 14}} (parmi 4005 cas traités)
Mais bon, c’est toujours en utilisant la force brute de l’informatique.
Hé oui, hélas… Je n’ai pas encore trouvé de façon rapide et ingénieuse d’en venir à bout, sur un simple coin de nappe… peut-être n’en existe-t-il aucune. Mais comment démontrer (ou invalider!) l’impossibilité de démontrer la chose « facilement » et « sans force brute » ?
Hi,
Ces solutions sont elles valables ?
« 20 82 –> add 102 sub 62 »
« 20 83 –> add 103 sub 63 »
« 20 84 –> add 104 sub 64 »
[…]
« 6 62 –> add 68 sub 56 »
« 2 23 –> add 25 sub 21 »
« 2 22 –> add 24 sub 20 »
??
my two cents:
si on pose l’age de Bob comme 10a+b
et l’age de Marcel comme 10x+y
la somme des ages est donc = 10x+y+10a+b = 10c+d
avec c = a ou b ou x ou y
et d = a ou b ou x ou y (mais différent de c)
mais dans ce cas la on peut déjà éliminer d’office le fait que c = x ou a
puisque 10x + 10a dans tous les cas sera > à 10x ou 10a
donc le chiffre des dizaines de la somme des ages (c) sera l’un des chiffres des unités de l’âge de Bob ou Robert (a ou y)
ce qui se vérifie avec la solution 24/18
je pense qu’un raisonnement similaire doit pouvoir se faire avec la soustraction et réduire encore un peu le champs des possibilités à tester
@Fleb : sauf si un des 2 est âgé de moins de 10 ans, ce qui n’est pas exclu dans l’énoncé.
Je ne sais pas si ça tient sur un coin de table, mais voici une solution relativement économe en papier :
On fait 2 tableaux à double entrée :
Les en-têtes : les unités de l’âge de Marcel et les unités de l’âge de Robert
Les valeurs : 1er tableau : l’unité qui résulte de l’addition / 2ème tableau : l’unité qui résulte de la soustraction (on ajoute 10).
On s’aperçoit qu’on a 4 chiffres différents (Unités+dizaines) pour chaque paire donc faciles à vérifier=> puis que le plus grand des 2 résultats va à Bob et le plus petit à Marcel.
Sauf pour les paires {(2,1),(2,6),(4,2),(4,7),(6,3),(6,8),(8,4),(8,9)} et tous les cas où les unités de Marcel = 5 pour lesquels nous n’avons que 3 chiffres différents.
Cependant 3 chiffres c’est largement suffisant pour déduire relativement facilement tous les cas (on a au moins le chiffre de la dizaine de l’un ou de l’autre des protagonistes).
Dites-moi si ça fait avancer le schmilblick …
*Bob pas Marcel dans mon commentaire
La Solution la plus Rapide
En prenant l’âge de Bob le double de celui de Marcel, d’entrée la question de la soustraction des âges est résolue. Quant à l’addition, on prend des petits nombres autant que possibles pour ne pas dépasser 10 dans l’addition des chiffres des dizaines. On prend aussi des âges à 2 chiffres. On commence par les plus petits.
(10, 20) (11, 22) (12, 24) (13, 26) (14, 28)
Surprise, dès les premiers essais on trouve 14 et 28.
28 + 14 = 42 et
28 – 14 = 14