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