import itertools
def calculer_probabilites(noms, cotes):
# Inverser les cotes pour avoir les probabilités implicites
inv_cotes = [1 / cote for cote in cotes]
total = sum(inv_cotes)
probas = [inv / total for inv in inv_cotes]
return probas
def top_vainqueurs(noms, probas, top_n=5):
# Trier les chiens par probabilité décroissante
return sorted(zip(noms, probas), key=lambda x: x[1], reverse=True)[:top_n]
def top_tierces_ordre(noms, probas, top_n=10):
tierces = []
for trio in itertools.permutations(range(len(noms)), 3):
i, j, k = trio
score = probas[i] * 0.5 + probas[j] * 0.3 + probas[k] * 0.2
tierces.append(((noms[i], noms[j], noms[k]), score))
return sorted(tierces, key=lambda x: x[1], reverse=True)[:top_n]
def top_tierces_desordre(noms, probas, top_n=10):
seen = set()
tierces = []
for combo in itertools.permutations(range(len(noms)), 3):
i, j, k = combo
key = tuple(sorted([i, j, k]))
if key in seen:
continue
seen.add(key)
score = probas[i] * 0.5 + probas[j] * 0.3 + probas[k] * 0.2
trio = sorted([noms[i], noms[j], noms[k]])
tierces.append((trio, score))
return sorted(tierces, key=lambda x: x[1], reverse=True)[:top_n]
# Exemple d'utilisation
noms_chiens = ["Chien A", "Chien B", "Chien C", "Chien D", "Chien E", "Chien F"]
cotes_chiens = [3.5, 4.0, 2.8, 6.0, 5.5, 8.0]
probas = calculer_probabilites(noms_chiens, cotes_chiens)
print("🎯 Top 5 chiens probables de gagner :")
for nom, p in top_vainqueurs(noms_chiens, probas):
print(f"{nom} - {p*100:.2f}%")
print("\n🥇 Top 10 tiercés dans l'ordre :")
for i, (trio, score) in enumerate(top_tierces_ordre(noms_chiens, probas), 1):
print(f"{i}. {' > '.join(trio)} — Score: {score:.4f}")
print("\n🎯 Top 10 tiercés dans le désordre :")
for i, (trio, score) in enumerate(top_tierces_desordre(noms_chiens, probas), 1):
print(f"{i}. {', '.join(trio)} — Score: {score:.4f}")