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/amistats1.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ó 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)
Paràmetres:
  • g (Graph) – graf d’amistats

  • p (str) – nom d’una persona de g

Retorna:

Conjunt de noms dels amics de p que tenen alguna altra amistat en comú amb p

Tipus de retorn:

set

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)
Paràmetres:
  • g (Graph) – graf d’amistats

  • a (str) – nom d’una persona de g

Retorna:

Nom de l’amic més antic de la persona a. En cas que a tingui dos o més amics igual d’antics, retorna el nom d’aquell d’ells que va abans alfabèticament. Si a no té cap amic, retorna l’string buit.

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.