Més grafs d'amistats ==================== En aquesta pregunta treballarem amb un `grafs d'amistats `_ que ja coneixeu, una instància de la classe :py:class:`~networkx.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 :py:const:`'any'` a cada aresta, per indicar l'any en què es van coneixer les persones (un nombre enter). Vegeu-ne un exemple: .. figure:: amistats.svg :width: 70 pc :align: center .. note:: Per tal de poder fer proves fàcilment us proporcionem el fitxer :download:`crea.py`, on hi ha la funció :py:func:`graf_exemple` que crea i retorna el graf de l'exemple de la figura. .. py:module:: mes_amistats Funció `comparteixen_amics` (2 punts) ------------------------------------- Al fitxer :file:`mes_amistats.py` (mòdul :py:mod:`mes_amistats`), escriviu-hi la funció següent: .. py:function:: comparteixen_amics(g, p) :param ~networkx.Graph g: graf d'amistats :param str p: nom d'una persona de `g` :return: Conjunt de noms dels amics de `p` que tenen alguna altra amistat en comú amb `p` :rtype: :py:class:`set` Essent ``g`` el graf de l'exemple, aquesta funció ha de respondre així: .. literalinclude:: tests-comparteixen.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat .. hint:: Es recomana que utilitzeu la funció :py:func:`~networkx.classes.function.common_neighbors` per a resoldre aquesta pregunta. Disposeu d'un joc de proves al fitxer :download:`tests-comparteixen.txt`. Funció `primera_amistat` (2 punts) ---------------------------------- Al fitxer :file:`mes_amistats.py` (mòdul :py:mod:`mes_amistats`), escriviu-hi la funció següent: .. py:function:: primera_amistat(g, a) :param ~networkx.Graph g: graf d'amistats :param str a: nom d'una persona de `g` :return: 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í: .. literalinclude:: tests-primera.txt :language: pycon :start-after: --ini-enunciat :end-before: --fi-enunciat Disposeu d'un joc de proves al fitxer :download:`tests-primera.txt`.