Re: [NON RESOLU] : Panne en Python...

Liste des GroupesRevenir à fcl python 
Sujet : Re: [NON RESOLU] : Panne en Python...
De : om+news (at) *nospam* miakinen.net (Olivier Miakinen)
Groupes : fr.comp.lang.python
Date : 02. Oct 2022, 13:03:35
Autres entêtes
Organisation : There's no cabale
Message-ID : <thbr67$1a61$1@cabale.usenet-fr.net>
References : 1 2
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4
Bonjour,

Le 02/10/2022 03:56, AIEO a écrit :
Le 28/09/2022 à 08:49, Dominique a écrit :
 
Bon, j'abdique. J'ai tenté avec itertools.permutations. Cette fonction
est très intéressante, mais elle échoue avec 15 chiffres => freeze de
mon PC !
 
J'ai recopié la solution du livre :

Je n'ai pas compris cette solution tout de suite, mais après un peu de réflexion
c'est ok.

 
****************************
 
l15=[n for n in range(1,16)]
v=[[3,8,15],[7,14],[1,6,13],[5,12],[4,11],[3,10],[2,9],[1,8],[7],[6,15],[5,14],[4,13],[3,12],[2,11],[1,10]]

Ici, pour un entier a donné entre 1 et 15, v[a-1] est l'ensemble des entiers b
entre 1 et 15 (différents de a) tels que a + b est un carré.

Par exemple pour a=3, v[2]=[1,6,13], et on a :
 3 + 1 = 4
 3 + 6 = 9
 3 + 13 = 16

[Note : il y a un nombre de trop dans v[]. Lequel est-ce ?]


t=[]
for a in range(1,16):
     for b in v[a-1]:
         for c in v[b-1]:
             for d in v[c-1]:
                 for e in v[d-1]:
                     for f in v[e-1]:
                         for g in v[f-1]:
                             for h in v[g-1]:
                                 for i in v[h-1]:
                                     for j in v[i-1]:
                                         for k in v[j-1]:
                                             for l in v[k-1]:
                                                 for m in v[l-1]:
                                                     for n in v[m-1]:
                                                         for o in v[n-1]:
 
t.append([a,b,c,d,e,f,g,h,i,j,k,l,m,n,o])

Ceci choisit pour chaque voisin d'un entier possible un autre entier tel que
la somme des deux soit un carré. Mais il est possible que la liste commence
par [1,3,1,... par exemple, où le nombre 1 est répété.

#print(t)
for l in t:
     if sorted(l)==l15:

Là on trie la liste obtenue. Si tous les nombres sont différents, on doit
obtenir la liste triée des entiers de 1 à 15, c'est-à-dire l15.

         print(l)

Seulement si c'est le cas, on affiche le résultat.

****************************
 
Elle me donne deux réponses réciproques :
 
[8, 1, 15, 10, 6, 3, 13, 12, 4, 5, 11, 14, 2, 7, 9]
[9, 7, 2, 14, 11, 5, 4, 12, 13, 3, 6, 10, 15, 1, 8]
 
Mais je n'arrive pas bien à comprendre cette solution...

Voir l'explication ci-dessus.

Cordialement,
--
Olivier Miakinen

Date Sujet#  Auteur
28 Sep 22 * Panne en Python...11Dominique
28 Sep 22 +- Re: Panne en Python...1Alain Ketterlin
2 Oct 22 +* [NON RESOLU] : Panne en Python...7AIEO
2 Oct 22 i+- Re: [NON RESOLU] : Panne en Python...1Olivier Miakinen
2 Oct 22 i`* Re: [NON RESOLU] : Panne en Python...5Alain Ketterlin
2 Oct 22 i `* Re: [NON RESOLU] : Panne en Python...4AIEO
2 Oct 22 i  `* Re: [NON RESOLU] : Panne en Python...3Alain Ketterlin
2 Oct 22 i   `* Re: [NON RESOLU] : Panne en Python...2AIEO
2 Oct 22 i    `- Re: [NON RESOLU] : Panne en Python...1Alain Ketterlin
2 Oct 22 `* [RESOLU] : Panne en Python...2Olivier Miakinen
2 Oct 22  `- Re: [RESOLU] : Panne en Python...1Alain Ketterlin

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal