Solució del l’Examen Final d’Ampliació d’Informàtica¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
19 de juny de 2026
- Copyright:
Reconeixement-CompartirIgual 3.0 No adaptada de Creative Commons
Jocs de proves. Utilitzen fitxers auxiliars restaurant-test1.csv, restaurant-test2.csv i polinomis.py.
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG=…
————————————————————————
Tests parelles¶
>>> import networkx as nx
>>> from npc import parelles
>>> g = nx.DiGraph()
>>> parelles(g) # doctesttag: +TAG=1_parelles
[]
>>> g = nx.DiGraph()
>>> g.add_edge("idle", "walk", canvi="start_walk")
>>> parelles(g) # doctesttag: +TAG=1_parelles
[]
>>> g = nx.DiGraph()
>>> g.add_edge("x", "y", canvi="a")
>>> g.add_edge("y", "x", canvi="b")
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('x', 'y')]
>>> g = nx.DiGraph()
>>> edges = [
... ("b", "a", "e1"), ("a", "b", "e2"),
... ("c", "d", "e3"), ("d", "c", "e4"),
... ("a", "c", "e5"),
... ]
>>> for u,v,c in edges:
... g.add_edge(u, v, canvi=c)
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('a', 'b'), ('c', 'd')]
>>> g = nx.DiGraph()
>>> g.add_edge("Node1", "node2", canvi="x")
>>> g.add_edge("node2", "Node1", canvi="y")
>>> g.add_edge("Node10", "Node2", canvi="z")
>>> g.add_edge("Node2", "Node10", canvi="w")
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('Node1', 'node2'), ('Node10', 'Node2')]
>>> g = nx.DiGraph()
>>> g.add_edge("s1", "t1", canvi="c")
>>> g.add_edge("t1", "s1", canvi="d")
>>> g.add_edge("u", "v", canvi="e")
>>> g.add_edge("loop", "stay", canvi="l")
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('s1', 't1')]
>>> g = nx.DiGraph()
>>> g.add_edge("aa", "ab", canvi="c1")
>>> g.add_edge("ab", "aa", canvi="c2")
>>> g.add_edge("aa", "a", canvi="c3")
>>> g.add_edge("a", "aa", canvi="c4")
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('a', 'aa'), ('aa', 'ab')]
>>> g = nx.DiGraph()
>>> nodes = [f"n{i}" for i in range(20)]
>>> for i in range(19):
... g.add_edge(nodes[i], nodes[i+1], canvi=str(i))
>>> g.add_edge("n1", "n0", canvi="r1")
>>> g.add_edge("n3", "n2", canvi="r2")
>>> g.add_edge("n5", "n4", canvi="r3")
>>> g.add_edge("n10", "n11", canvi="fwd")
>>> g.add_edge("n11", "n10", canvi="back")
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('n0', 'n1'), ('n10', 'n11'), ('n2', 'n3'), ('n4', 'n5')]
>>> g = nx.DiGraph()
>>> nodes = [f'n{i}' for i in range(16)]
>>> g.add_nodes_from(nodes)
>>> uni = [
... ('n0','n2'),('n1','n3'),('n2','n4'),('n3','n5'),
... ('n4','n6'),('n5','n7'),('n6','n8'),('n7','n9'),
... ('n8','n10'),('n9','n11'),('n10','n12'),('n11','n13')
... ]
>>> for u,v in uni:
... g.add_edge(u,v,canvi='u')
>>> bidir_pairs = [('n12','n13'),('n13','n12'),('n0','n1'),('n1','n0'),
... ('n14','n15'),('n15','n14'),('n2','n3'),('n3','n2')]
>>> for u,v in bidir_pairs:
... g.add_edge(u,v,canvi='b')
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('n0', 'n1'), ('n12', 'n13'), ('n14', 'n15'), ('n2', 'n3')]
>>> g = nx.DiGraph()
>>> nodes = [f'node{i:02d}' for i in range(16)]
>>> g.add_nodes_from(nodes)
>>> uni = [
... ('node00','node02'),('node01','node03'),('node02','node04'),
... ('node03','node05'),('node04','node06'),('node05','node07'),
... ('node06','node08'),('node07','node09'),('node08','node10'),
... ('node09','node11')
... ]
>>> for u,v in uni:
... g.add_edge(u,v,canvi='u')
>>> bidir = [('node00','node01'),('node01','node00'),
... ('node02','node03'),('node03','node02'),
... ('node04','node05'),('node05','node04'),
... ('node06','node07'),('node07','node06'),
... ('node12','node13'),('node13','node12')]
>>> for u,v in bidir:
... g.add_edge(u,v,canvi='b')
>>> parelles(g) # doctesttag: +TAG=1_parelles
[('node00', 'node01'), ('node02', 'node03'), ('node04', 'node05'), ('node06', 'node07'), ('node12', 'node13')]
Tests llista_canvis¶
>>> from npc import llista_canvis
>>> g = nx.DiGraph()
>>> g.add_edge('A','B', canvi='x')
>>> llista_canvis(g, 'A', 'B') # doctesttag: +TAG=2_canvis
['x']
>>> g = nx.DiGraph()
>>> g.add_edge('A','C', canvi='a')
>>> llista_canvis(g, 'C', 'A') # doctesttag: +TAG=2_canvis
[]
>>> g = nx.DiGraph()
>>> g.add_edge('A','B', canvi='x')
>>> g.add_edge('B','D', canvi='y')
>>> g.add_edge('A','C', canvi='u')
>>> g.add_edge('C','D', canvi='v')
>>> # Dos camins A->B->D (x,y) i A->C->D (u,v), amb longitud 2; qualsevol és acceptable
>>> res = llista_canvis(g, 'A', 'D') # doctesttag: +TAG=2_canvis
>>> res in (['x','y'], ['u','v'])
True
>>> g = nx.DiGraph()
>>> g.add_edge('s','a',canvi='x')
>>> g.add_edge('a','s',canvi='y')
>>> g.add_edge('a','b',canvi='z')
>>> g.add_edge('s','b',canvi='w')
>>> llista_canvis(g, 's', 'b') # doctesttag: +TAG=2_canvis
['w']
>>> g = nx.DiGraph()
>>> g.add_edge('p','q',canvi='go',weight=3)
>>> g.add_edge('q','r',canvi='enter',cost=1)
>>> llista_canvis(g, 'p', 'r') # doctesttag: +TAG=2_canvis
['go', 'enter']
>>> g = nx.DiGraph()
>>> nodes = [f'n{i}' for i in range(16)]
>>> g.add_nodes_from(nodes)
>>> edges = [
... ('n0','n1','a'),('n1','n2','b'),('n2','n3','c'),('n3','n4','d'),
... ('n4','n5','e'),('n5','n6','f'),('n6','n7','g'),('n7','n8','h'),
... ('n8','n9','i'),('n9','n10','j'),('n10','n11','k'),('n11','n12','l'),
... ('n12','n13','m'),('n13','n14','n'),('n14','n15','o'), ('n2', 'n7', 'w'),
... ('n0','n2','p'),('n2','n4','q'),('n4','n6','r'),('n6','n8','s'),('n8','n10','t'),
... ]
>>> for u,v,c in edges:
... g.add_edge(u,v,canvi=c)
>>> llista_canvis(g, 'n0', 'n15') # doctesttag: +TAG=2_canvis
['p', 'w', 'h', 't', 'k', 'l', 'm', 'n', 'o']
>>> llista_canvis(g, 'n7', 'n12') # doctesttag: +TAG=2_canvis
['h', 't', 'k', 'l']
>>> g = nx.DiGraph()
>>> nodes = [f'node{i:02d}' for i in range(16)]
>>> g.add_nodes_from(nodes)
>>> edges = [
... ('node00','node01','x'),('node01','node02','y'),('node02','node03','z'),
... ('node03','node04','a'),('node04','node05','b'),('node05','node06','c'),
... ('node06','node07','d'),('node07','node08','e'),('node08','node09','f'),
... ('node09','node10','g'),
... ('node00','node10','s1'),('node10','node11','h'),('node11','node12','i'),
... ('node12','node13','j'),('node13','node14','k'),('node14','node15','l'),
... ('node05','node09','s2'),('node02','node06','s3'),('node06','node10','s4'),
... ('node03','node07','s5'),
... ]
>>> for u,v,c in edges:
... g.add_edge(u,v,canvi=c)
>>> g.number_of_nodes(), g.number_of_edges()
(16, 20)
>>> llista_canvis(g, 'node00', 'node03') # doctesttag: +TAG=2_canvis
['x', 'y', 'z']
>>> llista_canvis(g, 'node06', 'node12') # doctesttag: +TAG=2_canvis
['s4', 'h', 'i']
>>> lc = llista_canvis(g, 'node01', 'node09')
>>> lc == ['y', 'z', 's5', 'e', 'f'] or lc == ['y', 'z', 'a', 'b', 's2'] or lc == ['y', 's3', 'd', 'e', 'f'] # doctesttag: +TAG=2_canvis
True
Tests recursivitat (eleva_pol)¶
>>> from polinomis import Polinomi
>>> from power import eleva_pol
>>> p = Polinomi()
>>> q = eleva_pol(p,1)
>>> print("[p(x)]^2 =", q) # doctesttag: +TAG=3_eleva
[p(x)]^2 = 0
>>> p = Polinomi()
>>> p[1], p[0] = -4, -1
>>> q = eleva_pol(p, 3)
>>> print("p(x) =", p, "; [p(x)]^2 =", q) # doctesttag: +TAG=3_eleva
p(x) = -4x-1 ; [p(x)]^2 = -64x^3-48x^2-12x-1
>>> p = Polinomi()
>>> p[3], p[2], p[1] = -1, 1, -2
>>> q = eleva_pol(p, 5)
>>> print("p(x) =", p, "; [p(x)]^5 =", q) # doctesttag: +TAG=3_eleva
p(x) = -x^3+x^2-2x ; [p(x)]^5 = -x^15+5x^14-20x^13+50x^12-105x^11+161x^10-210x^9+200x^8-160x^7+80x^6-32x^5
>>> p = Polinomi()
>>> p[2] = 1
>>> print(eleva_pol(p, 50)) # doctesttag: +TAG=3_eleva
x^100
>>> print(eleva_pol(p, 170)) # doctesttag: +TAG=3_eleva
x^340
>>> p = Polinomi()
>>> p[3], p[1], p[0] = -1, 2, -1
>>> print(eleva_pol(p, 4)) # doctesttag: +TAG=3_eleva
x^12-8x^10+4x^9+24x^8-24x^7-26x^6+48x^5-8x^4-28x^3+24x^2-8x+1
>>> print(eleva_pol(eleva_pol(p, 2), 2)) # doctesttag: +TAG=3_eleva
x^12-8x^10+4x^9+24x^8-24x^7-26x^6+48x^5-8x^4-28x^3+24x^2-8x+1
>>> print(eleva_pol(p, 8)) # doctesttag: +TAG=3_eleva
x^24-16x^22+8x^21+112x^20-112x^19-420x^18+672x^17+784x^16-2184x^15-112x^14+3920x^13-2618x^12-3136x^11+5136x^10-840x^9-3440x^8+3120x^7-420x^6-1120x^5+1008x^4-440x^3+112x^2-16x+1
>>> print(eleva_pol(p, 0)) # doctesttag: +TAG=3_eleva
1
>>> p = Polinomi()
>>> p[7], p[4], p[3], p[0] = -1, 2, 1, -1
>>> print(eleva_pol(p, 3)) # doctesttag: +TAG=3_eleva
-x^21+6x^18+3x^17-12x^15-15x^14-3x^13+8x^12+24x^11+12x^10+x^9-12x^8-15x^7-3x^6+6x^4+3x^3-1
Tests costos_proveidor¶
>>> import pandas as pd
>>> from restaurant import costos_proveidor
>>> df1 = pd.read_csv('restaurant-test1.csv')
>>> a,b = costos_proveidor(df1, 'LactisNord')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(2, -133)
>>> a,b = costos_proveidor(df1, 'CervesesArt')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(0, 0)
>>> a,b = costos_proveidor(df1, 'OliOriol')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(1, 4523)
>>> a,b = costos_proveidor(df1, 'MontLact')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(1, -30)
>>> a,b = costos_proveidor(df1, 'VinsPenedès')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(2, -798)
>>> df2 = pd.read_csv('restaurant-test2.csv')
>>> a,b = costos_proveidor(df2, 'GransGlobal')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(3, -2)
>>> a,b = costos_proveidor(df2, 'EcoVerd')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(2, -23)
>>> a,b = costos_proveidor(df2, 'ConfisCat')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(0, 0)
>>> a,b = costos_proveidor(df2, 'CarnsDelCamp')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(5, -207)
>>> a,b = costos_proveidor(df2, 'CarnsDelCamp')
>>> a,b = costos_proveidor(df2, 'ArtisMutis')
>>> (a, int(b)) # doctesttag: +TAG=4_costos
(0, 0)
Tests article_per_mesos¶
>>> from restaurant import article_per_mesos
>>> df1 = pd.read_csv('restaurant-test1.csv')
>>> article_per_mesos(df1, 'Fesols') == {'gener': 39, 'maig': 23, 'novembre': 18, 'febrer': 0, 'març': 0, 'abril': 0, 'juny': 0, 'juliol': 0, 'agost': 0, 'setembre': 0, 'octubre': 0, 'desembre': 0} # doctesttag: +TAG=5_article
True
>>> article_per_mesos(df1, 'Emmental') == {'agost': 37, 'desembre': 21, 'febrer': 44, 'gener': 0, 'març': 0, 'abril': 0, 'maig': 0, 'juny': 0, 'juliol': 0, 'setembre': 0, 'octubre': 0, 'novembre': 0} # doctesttag: +TAG=5_article
True
>>> article_per_mesos(df1, 'Pit de pollastre') == {'abril': 8, 'juliol': 39, 'novembre': 12, 'gener': 0, 'febrer': 0, 'març': 0, 'maig': 0, 'juny': 0, 'agost': 0, 'setembre': 0, 'octubre': 0, 'desembre': 0} # doctesttag: +TAG=5_article
True
>>> article_per_mesos(df1, 'Mató') == {'agost': 18, 'novembre': 34, 'gener': 0, 'febrer': 0, 'març': 0, 'abril': 0, 'maig': 0, 'juny': 0, 'juliol': 0, 'setembre': 0, 'octubre': 0, 'desembre': 0} # doctesttag: +TAG=5_article
True
>>> article_per_mesos(df1, 'Pebre negre') == {'agost': 846, 'novembre': 937, 'octubre': 231, 'gener': 0, 'febrer': 0, 'març': 0, 'abril': 0, 'maig': 0, 'juny': 0, 'juliol': 0, 'setembre': 0, 'desembre': 0} # doctesttag: +TAG=5_article
True
>>> df2 = pd.read_csv('restaurant-test2.csv')
>>> article_per_mesos(df2, 'Elefant') == {'gener': 0, 'febrer': 0, 'març': 0, 'abril': 0, 'maig': 0, 'juny': 0, 'juliol': 0, 'agost': 0, 'setembre': 0, 'octubre': 0, 'novembre': 0, 'desembre': 0} # doctesttag: +TAG=5_article
True
>>> article_per_mesos(df2, 'Botifarra') == {'agost': 91, 'desembre': 18, 'febrer': 108, 'gener': 42, 'juliol': 49, 'maig': 38, 'març': 38, 'novembre': 8, 'octubre': 58, 'abril': 0, 'juny': 0, 'setembre': 0} # doctesttag: +TAG=5_article
True
>>> article_per_mesos(df2, 'Cava') == {'desembre': 692, 'febrer': 170, 'gener': 672, 'juliol': 776, 'maig': 1748, 'març': 0, 'abril': 0, 'juny': 0, 'agost': 0, 'setembre': 0, 'octubre': 0, 'novembre': 0} # doctesttag: +TAG=5_article
True
>>> article_per_mesos(df2, 'Tonyina en llauna') == {'desembre': 41, 'febrer': 30, 'gener': 89, 'juliol': 6, 'març': 28, 'novembre': 27, 'octubre': 48, 'setembre': 1, 'abril': 0, 'maig': 0, 'juny': 0, 'agost': 0} # doctesttag: +TAG=5_article
True
>>> x = article_per_mesos(df2, 'Menuts')
>>> article_per_mesos(df2, 'Menuts') == {'agost': 4, 'febrer': 65, 'juny': 41, 'març': 8, 'setembre': 69, 'gener': 0, 'abril': 0, 'maig': 0, 'juliol': 0, 'octubre': 0, 'novembre': 0, 'desembre': 0} # doctesttag: +TAG=5_article
True