1. Més grafs d’amistats

En aquesta pregunta treballarem amb un grafs d’amistats que ja coneixeu, una instància de la classe Graph on els nodes són noms de persones i una aresta entre dos nodes indica una relació d’amistat directa entre dues persones. Ara bé, haurem afegit l’atribut 'any' a cada aresta, per indicar l’any en què es van coneixer les persones (un nombre enter). Vegeu-ne un exemple:

../../../../_images/amistats.svg

Nota

Per tal de poder fer proves fàcilment us proporcionem el fitxer crea.py, on hi ha la funció graf_exemple() que crea i retorna el graf de l’exemple de la figura.

1.1. Funció amigables (2 punts)

Al fitxer mes_amistats.py (mòdul mes_amistats), escriviu-hi la funció següent:

mes_amistats.amigables(g)
Paràmetres:

g (Graph) – graf d’amistats

Retorna:

Conjunt de noms de les persones de g que tenen més amistats directes que les altres persones de g

Tipus de retorn:

set

Essent g el graf de l’exemple, aquesta funció ha de respondre així:


>>> from mes_amistats import amigables

>>> amigables(g) == {'Anna', 'Quim', 'Sergi', 'Pep', 'Clara', 'Fina'}
True
>>> g.add_edge('Clara', 'Sergi', any=2024)
>>> amigables(g) == {'Sergi', 'Clara'}
True
>>> g.add_edge('Lluís', 'Sergi', any=2025)
>>> amigables(g)
{'Sergi'}

Disposeu d’un joc de proves al fitxer tests-amigables.txt.

1.2. Funció amistats_any (2 punts)

Al fitxer mes_amistats.py (mòdul mes_amistats), escriviu-hi la funció següent:

mes_amistats.amistats_any(g, y)
Paràmetres:
  • g (Graph) – graf d’amistats

  • y (int) – any

Retorna:

Llista ordenada alfabèticament de noms de persones de g tal que van fer alguna amistat l’any y.

Essent g el graf de l’exemple, aquesta funció ha de respondre així:


>>> from mes_amistats import amistats_any

>>> amistats_any(g, 2011)
['Daniel', 'Fina', 'Pere', 'Sergi']
>>> amistats_any(g, 2014)
['Fina', 'Lluís']
>>> amistats_any(g, 2000)
[]

Disposeu d’un joc de proves al fitxer tests-any.txt.