Solució de l’examen final d’Ampliació d’Informàtica - Torn 2

Organització:

Secció ETSEIB, Departament de Ciències de la Computació, UPC

Data:

13 de gener de 2025

Durada:

1 hora i 40 minuts

Copyright:

Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons

Jocs de proves


Els exemples que compten per la nota són només els que van seguits de # doctesttag: +TAG

>>> import networkx as nx
>>> def crea_graf(n):
...    l1 = 'ABCDEFRZWT'
...    t1 = [200+x for x,_ in enumerate(l1)]
...    l2 = 'GHIJKLA'
...    t2 = [100+x for x,_ in enumerate(l2)]
...    l3 = 'MNOPQ'
...    t3 = [20+x for x,_ in enumerate(l3)]
...    l4 = 'NIDXE'
...    t4 = [30+x for x,_ in enumerate(l4)]
...    l5 = 'RBHNSI'
...    t5 = [40+x for x,_ in enumerate(l5)]
...    l6 = 'ADJPTUE'
...    t6 = [60+x for x,_ in enumerate(l6)]
...    g = nx.Graph()
...    tmps = [t1, t2, t3, t4, t5, t6]
...    linies = [l1, l2, l3, l4, l5, l6]
...    for i, lp in enumerate(linies[:n]):
...        for j in range(len(lp)-1):
...            g.add_edge(lp[j], lp[j+1], linia='R'+str(i+1), temps=tmps[i][j])
...    return g

Tests per a parada_mes_propera

>>> from metro4 import parada_mes_propera
>>> g = crea_graf(4)
>>> parada_mes_propera(g, 'I')     # doctesttag: +TAG=1_parada_propera
('N', 30)
>>> parada_mes_propera(g, 'A')     # doctesttag: +TAG=1_parada_propera
('L', 105)
>>> parada_mes_propera(g, 'N')     # doctesttag: +TAG=1_parada_propera
('M', 20)
>>> parada_mes_propera(g, 'M')     # doctesttag: +TAG=1_parada_propera
('N', 20)
>>> g2=crea_graf(5)
>>> parada_mes_propera(g2, 'E')     # doctesttag: +TAG=1_parada_propera
('X', 33)
>>> parada_mes_propera(g2, 'I')     # doctesttag: +TAG=1_parada_propera
('N', 30)
>>> g3=crea_graf(6)
>>> parada_mes_propera(g3, 'A')     # doctesttag: +TAG=1_parada_propera
('D', 60)
>>> parada_mes_propera(g3, 'E')     # doctesttag: +TAG=1_parada_propera
('X', 33)
>>> parada_mes_propera(g3, 'B')     # doctesttag: +TAG=1_parada_propera
('R', 40)
>>> parada_mes_propera(g3, 'T')     # doctesttag: +TAG=1_parada_propera
('P', 63)

Tests per a nombre_de_transbordaments

>>> from metro4 import nombre_de_transbordaments
>>> g1 = crea_graf(2)
>>> g2 = crea_graf(4)
>>> g3 = crea_graf(6)
>>> nombre_de_transbordaments(g3, 'T', 'A')     # doctesttag: +TAG=1_transbordaments
3
>>> nombre_de_transbordaments(g3, 'D', 'I')     # doctesttag: +TAG=1_transbordaments
0
>>> nombre_de_transbordaments(g3, 'I', 'A')     # doctesttag: +TAG=1_transbordaments
1
>>> nombre_de_transbordaments(g3, 'D', 'J')     # doctesttag: +TAG=1_transbordaments
0
>>> nombre_de_transbordaments(g2, 'T', 'A')     # doctesttag: +TAG=1_transbordaments
2
>>> nombre_de_transbordaments(g2, 'D', 'I')     # doctesttag: +TAG=1_transbordaments
0
>>> nombre_de_transbordaments(g2, 'I', 'A')     # doctesttag: +TAG=1_transbordaments
0
>>> nombre_de_transbordaments(g2, 'D', 'J')     # doctesttag: +TAG=1_transbordaments
1
>>> nombre_de_transbordaments(g1, 'T', 'A')     # doctesttag: +TAG=1_transbordaments
0
>>> nombre_de_transbordaments(g1, 'D', 'I')     # doctesttag: +TAG=1_transbordaments
1
>>> nombre_de_transbordaments(g1, 'I', 'A')     # doctesttag: +TAG=1_transbordaments
0

Tests per a canviar_zeros

>>> from substituir import canviar_zeros
>>> l1 = [10, 9, 2, 0, 13, 0, 0, 4, 15, 0, 0]
>>> l2 = [10, 20, 30, 40]
>>> r=canviar_zeros(l1, l2)
>>> l1==[10, 9, 2, 10, 13, 20, 30, 4, 15, 40, 0] and r==None     # doctesttag: +TAG=2_zeros
True
>>> l1 = [0, 0, 3, 5]
>>> r=canviar_zeros(l1, l2)
>>> l1 == [10, 20, 3, 5] and r==None     # doctesttag: +TAG=2_zeros
True
>>> r=canviar_zeros(l1, l1)
>>> l1 == [10, 20, 3, 5] and r==None     # doctesttag: +TAG=2_zeros
True
>>> l1 = [0, 1, 0, 5] * 7
>>> l2 = list(range(10, 100, 6))
>>> r= canviar_zeros(l1, l2)
>>> l1 == [10, 1, 16, 5, 22, 1, 28, 5, 34, 1, 40, 5, 46, 1, 52, 5, 58, 1, 64, 5, 70, 1, 76, 5, 82, 1, 88, 5] and r==None     # doctesttag: +TAG=2_zeros
True
>>> l1=[10, 1, 20, 30, 0, 1, 50, 60, 70, 1, 80, 90, 10, 1, 20, 30, 40, 1, 50, 60]
>>> r=canviar_zeros(l1, l2)
>>> l1==[10, 1, 20, 30, 10, 1, 50, 60, 70, 1, 80, 90, 10, 1, 20, 30, 40, 1, 50, 60] and r==None     # doctesttag: +TAG=2_zeros
True
>>> l1 = [0, 1, 0, 1, 1, 0, 0]
>>> l3 = [0] * 3 + [2] * 10
>>> r=canviar_zeros(l1, l3)
>>> l1 == [0, 1, 0, 1, 1, 0, 2] and r==None     # doctesttag: +TAG=2_zeros
True
>>> r=canviar_zeros(l1, l2)
>>> l1==[10, 1, 16, 1, 1, 22, 2] and r==None     # doctesttag: +TAG=2_zeros
True

Tests per a recompte

>>> import pandas as pd
>>> from bd_arbres import recompte
>>> df = pd.read_csv('arbres_tst.csv', index_col='Tree_ID')
>>> recompte(df, 'Acer platanoides', 5, 10) # doctesttag: +TAG=3_recompte
(219, 1550, 7042)
>>> recompte(df, 'Betula pendula', 10, 20)  # doctesttag: +TAG=3_recompte
(235, 360, 160)
>>> recompte(df, '', 7, 12)                 # doctesttag: +TAG=3_recompte
(14, 13, 27)
>>> recompte(df, 'Sorbus aucuparia', 5, 15)     # doctesttag: +TAG=3_recompte
(257, 2553, 628)
>>> recompte(df, 'Platanus x acerifolia', 5, 15)  # doctesttag: +TAG=3_recompte
(1, 76, 102)
>>> recompte(df.iloc[::3], '', 5, 15)
(2, 9, 5)
>>> recompte(df, 'Prunus cerasifera', 50, 150)  # doctesttag: +TAG=3_recompte
(198, 0, 0)
>>> recompte(df, 'Prunus cerasifera', 1, 1)  # doctesttag: +TAG=3_recompte
(0, 1, 197)

Tests per a gruixuts

>>> import pandas as pd
>>> from bd_arbres import arbres_gruixuts
>>> df = pd.read_csv('arbres_tst.csv', index_col='Tree_ID')
>>> s = arbres_gruixuts(df, 2000)
>>> list(s.index)                     # doctesttag: +TAG=3_gruixuts
[]
>>> list(s.values)                    # doctesttag: +TAG=3_gruixuts
[]
>>> s = arbres_gruixuts(df.iloc[:800], 40)
>>> list(s.index)                     # doctesttag: +TAG=3_gruixuts
['> 20.1', '5.1-10', '10.1- 15', '15.1-20']
>>> list(s.values)                    # doctesttag: +TAG=3_gruixuts
[1, 3, 4, 7]
>>> s = arbres_gruixuts(df.iloc[100:300], 30)
>>> list(s.index)                     # doctesttag: +TAG=3_gruixuts
['5.1-10', '15.1-20', '10.1- 15']
>>> list(s.values)                    # doctesttag: +TAG=3_gruixuts
[3, 5, 9]
>>> s = arbres_gruixuts(df, 750)
>>> list(s.index)                     # doctesttag: +TAG=3_gruixuts
['5.1-10']
>>> list(s.values)                    # doctesttag: +TAG=3_gruixuts
[1]