Good EXO FIN

This commit is contained in:
Tipragot 2023-12-20 08:40:17 +01:00
parent 319bcc46d7
commit 41f515d675

View file

@ -83,9 +83,61 @@ def plus_ancienne_relation(personnes):
gens = (p1, p2)
return gens
print(plus_ancienne_relation(exemple_reseau.values()))
# print(plus_ancienne_relation(exemple_reseau.values()))
def plus_de_relations(personnes):
return max(personnes, key=lambda p: len(p.relations))
print(plus_de_relations(exemple_reseau.values()))
# print(plus_de_relations(exemple_reseau.values()))
def search(personnes, personne, target, depth=1):
if depth > len(personnes):
return None
if target in personne.relations:
return depth
distances = [search(personnes, personnes[relation], target, depth+1) for relation in personne.relations]
distances = [distance for distance in distances if distance is not None]
if distances:
return min(distances)
def search(personnes, personne, target, depth=1):
# Condition d'arret
if depth > len(personnes):
return None
if target in personne.relations:
return depth, [personne, personnes[target]]
# On appelle récursivement pour toutes les relations
distances = []
for relation in personne.relations:
other = personnes[relation]
distance = search(personnes, other, target, depth + 1)
if distance is not None:
distances.append(distance)
# Autre méthode
# distances = [search(personnes, personnes[relation], target, depth + 1) for relation in personne.relations]
# distances = [distance for distance in distances if distance is not None]
# On trouve la liaison la plus courte
if distances:
distance, personnes = min(distances, key=lambda d: d[0])
return distance, [personne] + personnes
distance, personnes = search(exemple_reseau, exemple_reseau["Marc"], "Stéphanie")
print(f"La relation la plus courte entre Marc est Stéphanie est de {distance} relations:")
for personne in personnes:
print(f" - {personne}")
# On vérifie si des personnes ne sont pas reliées
checked = []
for personne in exemple_reseau.values():
for other in exemple_reseau.values():
if personne == other:
continue
two = sorted([personne.nom, other.nom])
if two in checked:
continue
checked.append(two)
if search(exemple_reseau, personne, other.nom) is None:
print(f"{personne.nom} et {other.nom} n'ont pas de liaison possible")