Solució de l’examen final d’Informàtica¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
21 de juny de 2019
- Copyright:
Reconeixement-CompartirIgual 3.0 No adaptada de Creative Commons
- Durada:
1 hora i 20 minuts
Jocs de proves¶
En la correcció s’han usat els fitxers telecos2.csv i telecos3.csv.
Test exercici 1 : Classe Ascensor¶
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG=1_ascensor-initlen
# doctesttag: +TAG=1_ascensor-get
# doctesttag: +TAG=1_ascensor-pujabaixa
>>> from ascensors import Ascensor
>>> a1 = Ascensor(['PB', 'P1', 'P2', 'P3', 'P5', 'P7', 'P9', 'SA']) # doctesttag: +TAG=1_ascensor-initlen
>>> a1.en_funcionament # doctesttag: +TAG=1_ascensor-initlen
True
>>> len(a1) # doctesttag: +TAG=1_ascensor-initlen
8
>>> print(a1[0]) # doctesttag: +TAG=1_ascensor-get
PB
>>> for i in range(1, len(a1)): # doctesttag: +TAG=1_ascensor-get
... print(a1[i], end=',')
P1,P2,P3,P5,P7,P9,SA,
>>> a1.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'PB'
>>> a1.puja()
>>> a1.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'P1'
>>> a1.puja()
>>> a1.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'P2'
>>> for i in range(10):
... a1.puja()
>>> a1.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'SA'
>>> a1.baixa()
>>> a1.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'P9'
>>> a1.en_funcionament = False
>>> a1.baixa()
>>> a1.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'P9'
>>> a1.puja()
>>> a1.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'P9'
>>> a2 = Ascensor(['PKG', 'PB', 'Ent', 'Ppal', 'P1', 'P2'])
>>> a2.en_funcionament # doctesttag: +TAG=1_ascensor-initlen
True
>>> a2.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'PKG'
>>> a2.puja()
>>> a2.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'PB'
>>> a2.baixa()
>>> a2.baixa()
>>> a2.baixa()
>>> a2.planta_actual() # doctesttag: +TAG=1_ascensor-pujabaixa
'PKG'
>>> for i in range(8): # doctesttag: +TAG=1_ascensor-pujabaixa
... a2.puja()
... print(a2.planta_actual(), end=',')
PB,Ent,Ppal,P1,P2,P2,P2,P2,
>>> for i in range(15): # doctesttag: +TAG=1_ascensor-pujabaixa
... a2.en_funcionament = not a2.en_funcionament
... a2.baixa()
... print(a2.planta_actual(), end=',')
P2,P1,P1,Ppal,Ppal,Ent,Ent,PB,PB,PKG,PKG,PKG,PKG,PKG,PKG,
>>> for i in range(len(a2)): # doctesttag: +TAG=1_ascensor-get
... print(a2[i], end=',')
PKG,PB,Ent,Ppal,P1,P2,
>>> len(a2) # doctesttag: +TAG=1_ascensor-initlen
6
Test exercici 2 : Grafs¶
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG=2_grafs-afegir
# doctesttag: +TAG=2_grafs-costosa
>>> import networkx as nx
>>> from tasques import afegir
>>> from tasques import costosa
>>> gt = nx.DiGraph()
>>> afegir(gt, 'T1', ['A', 'B', 'D', 'C'], 10)
>>> sorted(gt.nodes()) # doctesttag: +TAG=2_grafs-afegir
['A', 'B', 'C', 'D', 'T1']
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('B', 'T1', {'mins': 10}), ('C', 'T1', {'mins': 10}), ('D', 'T1', {'mins': 10})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T1'
>>> afegir(gt, 'T2', ['E', 'A'], 15)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('B', 'T1', {'mins': 10}), ('C', 'T1', {'mins': 10}), ('D', 'T1', {'mins': 10}), ('E', 'T2', {'mins': 15})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T1'
>>> afegir(gt, 'T3', ['B', 'A', 'D', 'F'], 20)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('A', 'T3', {'mins': 20}), ('B', 'T1', {'mins': 10}), ('B', 'T3', {'mins': 20}), ('C', 'T1', {'mins': 10}), ('D', 'T1', {'mins': 10}), ('D', 'T3', {'mins': 20}), ('E', 'T2', {'mins': 15}), ('F', 'T3', {'mins': 20})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T3'
>>> afegir(gt, 'T4', list('FGHI'), 25)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('A', 'T3', {'mins': 20}), ('B', 'T1', {'mins': 10}), ('B', 'T3', {'mins': 20}), ('C', 'T1', {'mins': 10}), ('D', 'T1', {'mins': 10}), ('D', 'T3', {'mins': 20}), ('E', 'T2', {'mins': 15}), ('F', 'T3', {'mins': 20}), ('F', 'T4', {'mins': 25}), ('G', 'T4', {'mins': 25}), ('H', 'T4', {'mins': 25}), ('I', 'T4', {'mins': 25})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T4'
>>> afegir(gt, 'T5', list('GBCF'), 30)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('A', 'T3', {'mins': 20}), ('B', 'T1', {'mins': 10}), ('B', 'T3', {'mins': 20}), ('B', 'T5', {'mins': 30}), ('C', 'T1', {'mins': 10}), ('C', 'T5', {'mins': 30}), ('D', 'T1', {'mins': 10}), ('D', 'T3', {'mins': 20}), ('E', 'T2', {'mins': 15}), ('F', 'T3', {'mins': 20}), ('F', 'T4', {'mins': 25}), ('F', 'T5', {'mins': 30}), ('G', 'T4', {'mins': 25}), ('G', 'T5', {'mins': 30}), ('H', 'T4', {'mins': 25}), ('I', 'T4', {'mins': 25})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T5'
>>> afegir(gt, 'T6', list('CAHK'), 35)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('A', 'T3', {'mins': 20}), ('A', 'T6', {'mins': 35}), ('B', 'T1', {'mins': 10}), ('B', 'T3', {'mins': 20}), ('B', 'T5', {'mins': 30}), ('C', 'T1', {'mins': 10}), ('C', 'T5', {'mins': 30}), ('C', 'T6', {'mins': 35}), ('D', 'T1', {'mins': 10}), ('D', 'T3', {'mins': 20}), ('E', 'T2', {'mins': 15}), ('F', 'T3', {'mins': 20}), ('F', 'T4', {'mins': 25}), ('F', 'T5', {'mins': 30}), ('G', 'T4', {'mins': 25}), ('G', 'T5', {'mins': 30}), ('H', 'T4', {'mins': 25}), ('H', 'T6', {'mins': 35}), ('I', 'T4', {'mins': 25}), ('K', 'T6', {'mins': 35})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T6'
>>> afegir(gt, 'T7', list('JKL'), 5)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('A', 'T3', {'mins': 20}), ('A', 'T6', {'mins': 35}), ('B', 'T1', {'mins': 10}), ('B', 'T3', {'mins': 20}), ('B', 'T5', {'mins': 30}), ('C', 'T1', {'mins': 10}), ('C', 'T5', {'mins': 30}), ('C', 'T6', {'mins': 35}), ('D', 'T1', {'mins': 10}), ('D', 'T3', {'mins': 20}), ('E', 'T2', {'mins': 15}), ('F', 'T3', {'mins': 20}), ('F', 'T4', {'mins': 25}), ('F', 'T5', {'mins': 30}), ('G', 'T4', {'mins': 25}), ('G', 'T5', {'mins': 30}), ('H', 'T4', {'mins': 25}), ('H', 'T6', {'mins': 35}), ('I', 'T4', {'mins': 25}), ('J', 'T7', {'mins': 5}), ('K', 'T6', {'mins': 35}), ('K', 'T7', {'mins': 5}), ('L', 'T7', {'mins': 5})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T6'
>>> afegir(gt, 'T8', list('L'), 40)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('A', 'T3', {'mins': 20}), ('A', 'T6', {'mins': 35}), ('B', 'T1', {'mins': 10}), ('B', 'T3', {'mins': 20}), ('B', 'T5', {'mins': 30}), ('C', 'T1', {'mins': 10}), ('C', 'T5', {'mins': 30}), ('C', 'T6', {'mins': 35}), ('D', 'T1', {'mins': 10}), ('D', 'T3', {'mins': 20}), ('E', 'T2', {'mins': 15}), ('F', 'T3', {'mins': 20}), ('F', 'T4', {'mins': 25}), ('F', 'T5', {'mins': 30}), ('G', 'T4', {'mins': 25}), ('G', 'T5', {'mins': 30}), ('H', 'T4', {'mins': 25}), ('H', 'T6', {'mins': 35}), ('I', 'T4', {'mins': 25}), ('J', 'T7', {'mins': 5}), ('K', 'T6', {'mins': 35}), ('K', 'T7', {'mins': 5}), ('L', 'T7', {'mins': 5}), ('L', 'T8', {'mins': 40})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T6'
>>> afegir(gt, 'T9', list('KE'), 145)
>>> sorted(gt.edges(data=True)) # doctesttag: +TAG=2_grafs-afegir
[('A', 'T1', {'mins': 10}), ('A', 'T2', {'mins': 15}), ('A', 'T3', {'mins': 20}), ('A', 'T6', {'mins': 35}), ('B', 'T1', {'mins': 10}), ('B', 'T3', {'mins': 20}), ('B', 'T5', {'mins': 30}), ('C', 'T1', {'mins': 10}), ('C', 'T5', {'mins': 30}), ('C', 'T6', {'mins': 35}), ('D', 'T1', {'mins': 10}), ('D', 'T3', {'mins': 20}), ('E', 'T2', {'mins': 15}), ('E', 'T9', {'mins': 145}), ('F', 'T3', {'mins': 20}), ('F', 'T4', {'mins': 25}), ('F', 'T5', {'mins': 30}), ('G', 'T4', {'mins': 25}), ('G', 'T5', {'mins': 30}), ('H', 'T4', {'mins': 25}), ('H', 'T6', {'mins': 35}), ('I', 'T4', {'mins': 25}), ('J', 'T7', {'mins': 5}), ('K', 'T6', {'mins': 35}), ('K', 'T7', {'mins': 5}), ('K', 'T9', {'mins': 145}), ('L', 'T7', {'mins': 5}), ('L', 'T8', {'mins': 40})]
>>> costosa(gt) # doctesttag: +TAG=2_grafs-costosa
'T9'
Test exercici 3 : Recursivitat¶
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG=3_sumadiv
>>> from divisors import sumadiv
>>> sumadiv(12, 7) # doctesttag: +TAG=3_sumadiv
16
>>> sumadiv(100, 40) # doctesttag: +TAG=3_sumadiv
67
>>> sumadiv(7*5*3, 100) # doctesttag: +TAG=3_sumadiv
87
>>> sumadiv(110, 50) # doctesttag: +TAG=3_sumadiv
51
>>> sumadiv(7*8*9, 300) # doctesttag: +TAG=3_sumadiv
1056
>>> sumadiv(7*8*9*11, 200) # doctesttag: +TAG=3_sumadiv
1728
>>> sumadiv(666, 666) # doctesttag: +TAG=3_sumadiv
1482
>>> sumadiv(121212, 600) # doctesttag: +TAG=3_sumadiv
5994
>>> sumadiv(12345679, 800) # doctesttag: +TAG=3_sumadiv
38
>>> sumadiv(666, 1) # doctesttag: +TAG=3_sumadiv
1
Test exercici 4 : Pandas¶
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG=4_pandas-mesmobils o de
# doctesttag: +TAG=4_pandas-ranking
>>> import pandas
>>> df2 = pandas.read_csv('telecos2.csv', index_col=0)
>>> df3 = pandas.read_csv('telecos3.csv', index_col=0)
>>> from telefonia import mes_mobils
>>> mes_mobils(df2, 2) # doctesttag: +TAG=4_pandas-mesmobils
['Congo Democratic Republic of the', 'Congo Republic of the', "Cote d'Ivoire", 'Czech Republic', 'Djibouti', 'Dominican Republic', 'Guinea', 'Israel', 'Italy', 'Jamaica', 'Jordan', 'Kenya', 'Kuwait', 'Lesotho', 'Lithuania', 'Macau', 'Nigeria', 'Panama', 'Paraguay', 'Philippines', 'Portugal', 'Qatar', 'Uganda', 'United Arab Emirates', 'Venezuela']
>>> mes_mobils(df2, 10) # doctesttag: +TAG=4_pandas-mesmobils
['Congo Democratic Republic of the', 'Congo Republic of the', 'Uganda']
>>> mes_mobils(df3, 10) # doctesttag: +TAG=4_pandas-mesmobils
['Algeria', 'American Samoa', 'Bangladesh', 'Bermuda', 'Bolivia', 'Brazil', 'Brunei', 'Costa Rica', 'Greenland', 'Guadeloupe', 'Israel', 'Macedonia', 'Mayotte', 'Poland', 'Puerto Rico', 'Reunion', 'Russia', 'Somalia', 'Uganda', 'Zimbabwe']
>>> mes_mobils(df3, 40) # doctesttag: +TAG=4_pandas-mesmobils
['Algeria', 'Bangladesh', 'Bermuda', 'Bolivia', 'Brazil', 'Brunei', 'Costa Rica', 'Greenland', 'Guadeloupe', 'Israel', 'Macedonia', 'Mayotte', 'Poland', 'Puerto Rico', 'Reunion', 'Russia', 'Zimbabwe']
>>> mes_mobils(df3, 300) # doctesttag: +TAG=4_pandas-mesmobils
[]
>>> from telefonia import ranking_hosts
>>> ranking_hosts(df2, 'Norway') # doctesttag: +TAG=4_pandas-ranking
11
>>> ranking_hosts(df3, 'Albania') # doctesttag: +TAG=4_pandas-ranking
142
>>> ranking_hosts(df2, 'Venezuela') # doctesttag: +TAG=4_pandas-ranking
32
>>> ranking_hosts(df3, 'India') # doctesttag: +TAG=4_pandas-ranking
43
>>> ranking_hosts(df2, 'Uruguay') # doctesttag: +TAG=4_pandas-ranking
22