Forum de mathématiques - Bibm@th.net
Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1026 Programmation » Combinaisons de 12 nombres : triplets » 27-08-2011 09:37:01
- totomm
- Réponses : 30
Bonjour,
Ci-dessous mon code à la demande de freddy.
cordialement
# Programme créé par totomm (Bibmath) pour traiter le problème
# "Combinaisons" posé par Fayrouse le 12-05-2011 dans le "Café Mathématique"
# soient les nombres Compris Entre 1 Et 12 (1-2-3-4-5-6-7-8-9-10-11-12)
# Etablir: 1-Toutes Les Combinaison Possibles des 5 nombres parmi les 12.
# 2-le Nombre minimal de ces Combinaisons de telle sorte
# que tout triplet de 3 de ces nombres soit contenu au moins une fois
# dans au moins une combinaison
# Combinaisons de n objets pris p à p (5 objets parmi 12)
list12_5=[]
for a in range(1,9):
for b in range(a+1,10):
for c in range(b+1,11):
for d in range(c+1,12):
for e in range(d+1,13):
list12_5.append([a,b,c,d,e])
list12_3=[] # 3 objets parmi 12
for c in range(1,11):
for d in range(c+1,12):
for e in range(d+1,13):
list12_3.append([c,d,e])
print("Combinaisons :")
print("5 nombres parmi 12 =",len(list12_5))
print("3 nombres parmi 12 =",len(list12_3))
# Idée pour la question 2 :
# Itérer pour ne retenir que les 5-combinaisons qui contiennent le maximum
# de triplets "non encore vus"
# former les 10 triplets de chaque 5-combinaison de list12_5
# et marquer chacun présent si leur 5-combinaison est retenue
#Initialisations
présents=[0]*len(list12_3) # contiendra 1 pour chaque triplet "vu"
nbfois=[0]*13 # marque le nombre de fois où un nombre nb figure
# dans les triplets "déjà vus" dans les 5-combinaisons retenues
combRetenus=[] # liste des 5-combinaisons composant le minimum cherché
nbT=0 # nombre de triplets "vus" au fur et à mesure de l'itération
for k in range(0,15): # itération pour retenir de nouvelles 5-combinaisons
if nbT==len(list12_3):break # Condition d'arrêt
for n in range(0,len(list12_5)):
comb=list12_5[n]
if comb not in list(combRetenus): #prendre chaque 5-combinaison non encore retenue
tripletsComb=[]
for a in range(0,3):
for b in range(a+1,4):
for c in range(b+1,5):
triplet=[comb[a],comb[b],comb[c]]
tripletsComb.append(triplet)
#print(tripletsComb)
TnonInclus=0
for p in range(0,10):
i=list12_3.index(tripletsComb[p])
if présents[i]==0:
TnonInclus +=1
if (10-TnonInclus) == k:
# Essai d'égalisation entre nombres quand k==0
combOK=1
if k==0: # Mettre ici 15 au lieu de 0 entraine 33 5-Combinaisons
for p in range (0,10):
if nbfois[tripletsComb[p][0]] == 30: combOK=0
if nbfois[tripletsComb[p][1]] == 30: combOK=0
if nbfois[tripletsComb[p][2]] == 30: combOK=0
if combOK==1:
for p in range(0,10):
i=list12_3.index(tripletsComb[p])
if présents[i]==0:nbT+=1
présents[i] += 1
nbfois[tripletsComb[p][0]] += 1
nbfois[tripletsComb[p][1]] += 1
nbfois[tripletsComb[p][2]] += 1
combRetenus.append(comb)
print("itération N°",k+1," :",nbT,"triplets contenus dans",len(combRetenus)," 5-combinaisons.")
print("nombre de triplets contenus =",nbT," vus ce nombre de fois :")
print(présents)
print("Les nombres sont vus", nbfois)
print()
print("Nombre de 5-combinaisons retenues =",len(combRetenus))
print(combRetenus)
print("fin")
Tnb=[0]*len(list12_3)
nbdansTnb=0
for n in range(0,len(combRetenus)):
cr=combRetenus[n]
for a in range(0,3):
for b in range(a+1,4):
for c in range(b+1,5):
T=[cr[a],cr[b],cr[c]]
i=list12_3.index(T)
Tnb[i] += 1
nbdansTnb += 1
print()
print("vérification : Les triplets sont vus",nbdansTnb,"fois, chacun vu ce nombre de fois :")
print(Tnb)
print("Fin de vérification")
Edit Fred :
J'ai modifié ta balise code pour activer la coloration syntaxique comme elle est désormais permise par le forum.
Pour colorer les programmes Python, il faut écrire [ code=python] (tu avais ajouté la version...)
Edit totomm :
Merci Fred, Précédemment j'avais piégé les utilisateurs en passant de 2.7 à 3.2 sans rien dire...Je mets maintenant la version en tête du code.
#1027 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » La muse et le vampire ... » 26-08-2011 18:45:26
Bonsoir,
Le post #33 donne une solution apparemment simple (inspirée des posts antérieurs) : Le vampire sera ramené sur sur une ligne VoM en un temps fini, où qu'il se trouve quand la muse arrive tranquillement sur le cercle de rayon 0,24R
Le post #46 donne une solution qui permet à la muse de s'échapper en un temps total minimal
en quoi "dt est une quantité non négligeable" peut compromettre cette solution ? tant géométriquement qu'en intégrant pour trouver ce demi-cercle de rayon R/8 ?
Il a été cité des trajectoires qui prendraient un temps de nage infini ...
Quelle est "THE" solution (au sens du post #41) ??
Cordialement
#1028 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Sujet pour totomn ! ... » 26-08-2011 17:43:14
re,
je suis d'accord que répondre à "comment fait on ?" est bien mieux que de se contenter de montrer que le résultat existe.
Toutefois, il me semble qu'il est nécessaire de montrer au préalable que le résultat existe avant de développer une méthode de recherche de résultat : j'en connais (et j'en suis) qui ont perdu un temps fou à chercher une solution à un problème qui n'en admettait pas ...
On finira bien par trouver un accord :-)
idéalement je conteste "nécessaire de montrer au préalable" car j'essaie toujours d'évaluer ce qui sera le plus rapide : trouver une démonstration ou écrire le programme qui me dira (en temps d'exécution limité) si une solution existe ou non...
et je ne suis pas paresseux au point de toujours écrire un programme...
Par contre dans le cas des vases communicants, j'ai appris en programmant un tas de choses intéressantes sur les séquences minimales, dont je ne vois pas du tout comment en "démontrer" l'existence...
Cordialement
#1029 Re : Enigmes, casse-têtes, curiosités et autres bizarreries » Sujet pour totomn ! ... » 26-08-2011 17:26:45
Bonjour,
Je suis inscrit car Fred m'a permis de corriger un adresse erronée (.fr au lieu de .com). Merci à Fred
Salut totomn,
à ce propos, je serais preneur de la méthode que tu as développée pour arriver à établir les 32 5-grilles nécessaires et suffisantes pour retrouver les 220 3-grilles des nombres compris entre 1 et 12.
Te souviens tu ?
Je recherche et je posterai le programme Python (que je crois avoir gardé) dans le forum "Programmation" d'ici quelques jours.
Cordialement
Si le triangle précédant est composé uniquement de nombres différents le Forain va surement perdre ? !
La méthode des différences retrouve aussi, rapidement, une égalité. Dans le cas présenté : 1, 10, 12, 10...tilt
donc on écrit immédiatement 35+3 et 25+13. Cette méthode balaie les sommes de plus de 2 termes, mais n'est pas aussi exhautive pour les sommes de 2 termes ?!
Cordialement







