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:
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ó comparteixen_amics (2 punts)¶
Al fitxer mes_amistats.py (mòdul mes_amistats), escriviu-hi la funció següent:
- mes_amistats.comparteixen_amics(g, p)¶
Essent g el graf de l’exemple, aquesta funció ha de respondre així:
>>> from mes_amistats import comparteixen_amics
>>> comparteixen_amics(g, 'Pep') == {'Anna', 'Clara'}
True
>>> comparteixen_amics(g, 'Daniel')
set()
>>> g.add_edge('Fina', 'Olga', any=2010)
>>> g.add_edge('Sofia', 'Olga', any=2012)
>>> comparteixen_amics(g, 'Fina') == {'Sergi', 'Olga', 'Sofia', 'Lluís'}
True
Suggeriment
Es recomana que utilitzeu la funció common_neighbors() per a resoldre aquesta pregunta.
Disposeu d’un joc de proves al fitxer tests-comparteixen.txt.
1.2. Funció primera_amistat (2 punts)¶
Al fitxer mes_amistats.py (mòdul mes_amistats), escriviu-hi la funció següent:
- mes_amistats.primera_amistat(g, a)¶
Essent g el graf de l’exemple, aquesta funció ha de respondre així:
>>> from mes_amistats import primera_amistat
>>> primera_amistat(g, 'Quim')
'Maria'
>>> primera_amistat(g, 'Manel')
''
>>> g.add_edge('Sergi', 'Pere', any=2010)
>>> primera_amistat(g, 'Sergi')
'Daniel'
Disposeu d’un joc de proves al fitxer tests-primera.txt.