Un premier script
On considère le programme python suivant:
def toutChiffre(m):
"""
m est un entier naturel dont l'écriture
décimale est de longueur 9,
c'est à dire 10^8 <= m < 10^9
"""
m = str(m)
for i in '123456789':
if i not in m: return False
return True
Que renverra toutChiffre(234567891)
? toutChiffre(232567891)
?
Quel est le "rôle" de cette fonction?
Un second script
On considère le programme suivant:
def perm():
liste = []
for i in range(123456789, 987654321 + 1):
if toutChiffre(i):
liste.append(i)
return liste
Que contiendra la liste renvoyée par la fonction?
Un petit problème
Avec les neuf chiffres 1, 2, 3, 4, 5, 6, 7, 8, 9 on forme trois entiers à deux chiffres et un entier à trois chiffres (chacun des 9 chiffres étant présent une et une seule fois). Est-il possible que le produit des deux entiers à deux chiffres ainsi formé soit égal au produit des deux autres?
Il s'agit donc de remplir correctement les cases suivantes, chacun des entiers entre 1 et 9 devant être présent exactement une fois:
× = ×
Par exemple $a=67$, $b=58$, $c=29$, $d=134$ et $a\times b = 3886 = c\times d$. Quelles sont les autres possibilités?
- Question 1
- Question 2
- Question 3
toutChiffre(234567891) = True
, toutChiffre(232567891) = False
.
La fonction renvoie True si l'écriture décimale de m contient les neuf chiffres 1, 2, 3, 4, 5, 6, 7, 8, 9. Et renvoie False sinon.
La liste calculée par la fonction contiendra tous les entiers s'écrivant avec les neuf chiffres 1, 2, 3, 4, 5, 6, 7, 8, 9.
Cette liste est donc de longueur $9! = 362\ 880$.
Le début de liste:
123456789, 123456798, 123456879, 123456897, 123456978, 123456987, 123457689, 123457698, 123457869, 123457896, 123457968, 123457986, 123458679, 123458697, 123458769, 123458796, 123458967, 123458976, 123459678, 123459687, 123459768, 123459786,
def toutChiffre(m):
"""
m est un entier naturel dont l'écriture
décimale est de longueur 9
"""
m=str(m)
for i in '123456789':
if i not in m: return False
return True
def perm():
n = 123456789
for i in range(n,10**9):
if toutChiffre(i):
yield i
def produits(m):
e1 = m%100
m = m//100
e2 = m%100
m = m//100
e3 = m%100
m = m//100
e4 = m
p1 = e1*e2
p2 = e3*e4
if p1 == p2:
return (e1,e2,e3,e4, p1)
else:
return False
for p in perm():
q = produits(p)
if q: print(q)
On obtient:
(67, 58, 29, 134, 3886) (58, 67, 29, 134, 3886) (69, 54, 27, 138, 3726) (54, 69, 27, 138, 3726) (73, 58, 29, 146, 4234) (58, 73, 29, 146, 4234) (79, 46, 23, 158, 3634) (46, 79, 23, 158, 3634) (79, 64, 32, 158, 5056) (64, 79, 32, 158, 5056) (69, 58, 23, 174, 4002) (58, 69, 23, 174, 4002) (96, 58, 32, 174, 5568) (58, 96, 32, 174, 5568) (93, 54, 27, 186, 5022) (54, 93, 27, 186, 5022) (74, 63, 18, 259, 4662) (63, 74, 18, 259, 4662) (98, 76, 14, 532, 7448) (76, 98, 14, 532, 7448) (96, 73, 12, 584, 7008) (73, 96, 12, 584, 7008)