Solució de l’examen de reavaluació d’Informàtica

Organització:

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

Data:

4 de juliol de 2023

Durada:

2 hores minuts

Copyright:

Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons

Jocs de proves

Iteradors: seleccio

>>> from seleccio import seleccio_valor
>>> it1 = iter(['pa', 'oli', 'vi', 'hola', 'hola', 'adeu', 'butxaca'])
>>> it2 = iter([0, 5, 1, 3])
>>> it3 = seleccio_valor(it1, it2)
>>> next(it3), next(it3), next(it3)   # doctesttag: +TAG=1_seleccio
('p', 'i', 'a')
>>> it1 = iter(['pollastre', 'patates', 'enciam', 'hola', 'hola', 'adeu', 'butxaca', 'amor', 'pare'])
>>> it2 = iter([5, 5, 3, 6, 5, 0, 10, 20])    # doctesttag: +TAG=1_seleccio
>>> list(seleccio_valor(it1, it2))
['s', 'e', 'i', 'a']
>>> it1 = iter(['croissant', 'pessic', 'vinagre', 'bon', 'dia', 'ningú', 'ho', 'ha', 'demanat', 'però', 'us', 'dic', 'bon', 'dia'])
>>> it2 = iter([0, 1, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, 1, 2, 3, 4])
>>> list(seleccio_valor(it1, it2))                                       # doctesttag: +TAG=1_seleccio
['c', 'e', 'g', 'b', 'i', 'n', 'd', 'e', 'd']
>>> it1 = iter(['croissant', 'pessic', 'vinagre'])
>>> it2 = iter([100, 200, 300])
>>> list(seleccio_valor(it1, it2))                                       # doctesttag: +TAG=1_seleccio
[]
>>> it1 = iter(['croissant', 'pessic', 'vinagre'])
>>> it2 = iter([3, 200, 1])
>>> list(seleccio_valor(it1, it2))                                       # doctesttag: +TAG=1_seleccio
['i', 'i']

Classes: autonoms

>>> from autonoms import Autonom
>>> b1 = Autonom('SA43', 8.0)
>>> b1.id, b1.vel                                                   # doctesttag: +TAG=2_autonoms
('SA43', 8.0)
>>> str(b1)                                                         # doctesttag: +TAG=2_autonoms
'Vehicle SA43'
>>> b1.durada(69.9)                                                 # doctesttag: +TAG=2_autonoms
datetime.timedelta(seconds=31455)
>>> b1.durada(245.2)                                                # doctesttag: +TAG=2_autonoms
datetime.timedelta(days=1, seconds=23940)
>>> b2 = Autonom('XM68', 5.5)
>>> str(b2)                                                         # doctesttag: +TAG=2_autonoms
'Vehicle XM68'
>>> b2.id, b2.vel                                                   # doctesttag: +TAG=2_autonoms
('XM68', 5.5)
>>> b2.durada(878.5)                                                # doctesttag: +TAG=2_autonoms
datetime.timedelta(days=6, seconds=56618, microseconds=181818)
>>> b3 = Autonom('HH22', 30)
>>> b3.id, b3.vel                                                   # doctesttag: +TAG=2_autonoms
('HH22', 30)
>>> str(b3)                                                         # doctesttag: +TAG=2_autonoms
'Vehicle HH22'
>>> b3.durada(100)                                                  # doctesttag: +TAG=2_autonoms
datetime.timedelta(seconds=12000)

Classes: flota

>>> from datetime import datetime
>>> from vehicles import Flota
>>> from autonoms import Autonom
>>> m = Flota('Eltour')
>>> m.afeg_vehicle(Autonom('B05', 9.5))
>>> m.afeg_vehicle(Autonom('T73', 18.1))
>>> len(m)                                                            # doctesttag: +TAG=2_flota
2
>>> m[0].id, m[0].vel                                                 # doctesttag: +TAG=2_flota
('B05', 9.5)
>>> m.afeg_vehicle(Autonom('AD56', 8.2))
>>> len(m)                                                            # doctesttag: +TAG=2_flota
3
>>> m[2].id, m[2].vel                                                 # doctesttag: +TAG=2_flota
('AD56', 8.2)
>>> m.afeg_vehicle(Autonom('AD56', 7.9))
>>> m[2].id, m[2].vel                                                  # doctesttag: +TAG=2_flota
('AD56', 7.9)
>>> len(m)                                                              # doctesttag: +TAG=2_flota
3
>>> m.afeg_vehicle(Autonom('TT34', 2.9))
>>> len(m)                                                             # doctesttag: +TAG=2_flota
4
>>> m[3].vel                                                         # doctesttag: +TAG=2_flota
2.9
>>> m.afeg_vehicle(Autonom('JT56', 0))
>>> len(m)                                                            # doctesttag: +TAG=2_flota
5
>>> m[4].vel                                                             # doctesttag: +TAG=2_flota
0
>>> m.afeg_vehicle(Autonom('JT56', 15))
>>> len(m)                                                              # doctesttag: +TAG=2_flota
5
>>> m[4].vel                                                             # doctesttag: +TAG=2_flota
15

Classes: AutonomsTop

>>> from autonomstop import AutonomTop
>>> b1 = AutonomTop('MN67', 30, 100, 3)
>>> b1.id, b1.vel, b1.tmax, b1.trepos                                          # doctesttag: +TAG=2_autonomstop
('MN67', 30, 100, 3)
>>> b1.durada(100)                                                             # doctesttag: +TAG=2_autonomstop
datetime.timedelta(seconds=12000)
>>> b2 = AutonomTop('HR45', 22, 3, 4)
>>> b2.id, b2.vel, b2.tmax, b2.trepos                                             # doctesttag: +TAG=2_autonomstop
('HR45', 22, 3, 4)
>>> b2.durada(100)                                                                  # doctesttag: +TAG=2_autonomstop
datetime.timedelta(seconds=30763, microseconds=636364)
>>> b2.durada(2111)                                                               # doctesttag: +TAG=2_autonomstop
datetime.timedelta(days=9, seconds=14236, microseconds=363636)
>>> b2.durada(101)                                                               # doctesttag: +TAG=2_autonomstop
datetime.timedelta(seconds=30927, microseconds=272727)
>>> b2.durada(111)                                                                 # doctesttag: +TAG=2_autonomstop
datetime.timedelta(seconds=32563, microseconds=636364)
>>> b3 = AutonomTop('JW12', 15, 2, 1)
>>> b3.id, b3.vel, b3.tmax, b3.trepos                                             # doctesttag: +TAG=2_autonomstop
('JW12', 15, 2, 1)
>>> b3.durada(100)                                                                  # doctesttag: +TAG=2_autonomstop
datetime.timedelta(seconds=34800)
>>> b3.durada(2111)                                                               # doctesttag: +TAG=2_autonomstop
datetime.timedelta(days=8, seconds=67440)
>>> b3.durada(2000)                                                               # doctesttag: +TAG=2_autonomstop
datetime.timedelta(days=8, seconds=26400)
>>> b3.durada(111)                                                                 # doctesttag: +TAG=2_autonomstop
datetime.timedelta(seconds=37440)

Grafs

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

>>> import networkx as nx
>>> def crea_xarxa_metro(n=10):
...   g = nx.Graph()
...   linies = [
...        ['AA', 'a1', '12', 'a2', 'a3', '14', 'a4'] ,
...        ['BB', 'b1', '12', 'b2', 'b3', 'b4', '14', 'b5'] ,
...        ['CC', 'c1', '14', 'c2', '12', 'c3'] ,
...        ['DD', 'd1', 'a2', '12', 'd2', 'd3', 'd4'] ,
...        ['L1', '10', '11', '12', '13', '14', '15'] ,
...        ['L2', '20', '11', '22', '23', '24', '26', '27', '14', '28'] ,
...        ['L3', '30', '11', '32', '33', '13', '35', '36', '37'] ,
...        ['L4', '40', '11', '44', '45', '46', '13', '48'] ,
...        ['L5', '50', '14', '51', '52', '53', '54', '55', '56', '11', '57', '58'] ,
...        ['XX', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6'] ,
...   ]
...   for lin in linies[:n]:
...         nx.add_path(g, lin[1:], linia=lin[0])
...   return g
>>> from mes_metro import trajecte_alternatiu
>>> g = crea_xarxa_metro()
>>> trajecte_alternatiu(g, 'a2', 'a3')   # doctesttag: +TAG=3_trajecte_alternatiu
['a2', '12', 'c2', '14', 'a3']
>>> g = crea_xarxa_metro()
>>> trajecte_alternatiu(g, '14', 'a4')   # doctesttag: +TAG=3_trajecte_alternatiu
[]
>>> g = crea_xarxa_metro()
>>> trajecte_alternatiu(g, 'b2', '12')   # doctesttag: +TAG=3_trajecte_alternatiu
['b2', 'b3', 'b4', '14', 'c2', '12']
>>> g = crea_xarxa_metro()
>>> trajecte_alternatiu(g, 'c2', '12')   # doctesttag: +TAG=3_trajecte_alternatiu
['c2', '14', '13', '12']
>>> g = crea_xarxa_metro()
>>> trajecte_alternatiu(g, 'a2', '12')   # doctesttag: +TAG=3_trajecte_alternatiu
['a2', 'a3', '14', 'c2', '12']
>>> trajecte_alternatiu(g, '12', '11')   # doctesttag: +TAG=3_trajecte_alternatiu
['12', '13', '33', '32', '11']
>>> trajecte_alternatiu(g, '27', '14')   # doctesttag: +TAG=3_trajecte_alternatiu
['27', '26', '24', '23', '22', '11', '12', 'c2', '14']
>>> trajecte_alternatiu(g, '33', '13')   # doctesttag: +TAG=3_trajecte_alternatiu
['33', '32', '11', '12', '13']
>>> trajecte_alternatiu(g, '52', '51')   # doctesttag: +TAG=3_trajecte_alternatiu
['52', '53', '54', '55', '56', '11', '12', 'c2', '14', '51']
>>> trajecte_alternatiu(g, '14', '51')   # doctesttag: +TAG=3_trajecte_alternatiu
['14', 'c2', '12', '11', '56', '55', '54', '53', '52', '51']

Recursivitat: verificacio

>>> import datetime
>>> from date_checking import verificacio
>>> l = []
>>> verificacio(l)                                                                   # doctesttag: +TAG=4_verificacio
(-1, -1)
>>> l = []
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 25)))
>>> verificacio(l)                                                                  # doctesttag: +TAG=4_verificacio
(-1, -1)
>>> l = []
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 25)))
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 20)))
>>> verificacio(l)                                                                  # doctesttag: +TAG=4_verificacio
(-1, -1)
>>> l = []
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 25)))
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 20)))
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 19)))
>>> verificacio(l)                                                                  # doctesttag: +TAG=4_verificacio
(2, -1)
>>> l = []
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 25)))
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 20)))
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 19)))
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 15)))
>>> verificacio(l)                                                                      # doctesttag: +TAG=4_verificacio
(2, -1)
>>> l = []
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 25)))
>>> l.append((datetime.date (2023, 1, 25), datetime.date (2023, 1, 30)))
>>> l.append((datetime.date (2023, 1, 20), datetime.date (2023, 1, 20)))
>>> l.append((datetime.date (2023, 1, 30), datetime.date (2023, 2, 1)))
>>> l.append((datetime.date (2023, 1, 30), datetime.date (2023, 2, 25)))
>>> verificacio(l)                                                                           # doctesttag: +TAG=4_verificacio
(-1, -1)

Pandas: electro1

>>> import pandas as pd
>>> from electro import electro1
>>> df = pd.read_csv('consum_elect.csv', dtype = {'Codi_Postal': str})
>>> electro1(df, 'Residencial', '0-6')    # doctesttag: +TAG=5_electro_1
('2022-02-18', '08008', 8934)
>>> electro1(df, 'Residencial', '6-12')    # doctesttag: +TAG=5_electro_1
('2022-01-01', '08008', 10246)
>>> electro1(df, 'Residencial', '12-18')    # doctesttag: +TAG=5_electro_1
('2022-01-01', '08008', 12108)
>>> electro1(df, 'Indústria', '0-6')    # doctesttag: +TAG=5_electro_1
('2022-03-30', '08001', 659)
>>> electro1(df, 'Indústria', '6-12')    # doctesttag: +TAG=5_electro_1
('2022-01-01', '08016', 842)
>>> electro1(df, 'Indústria', '18-24')    # doctesttag: +TAG=5_electro_1
('2022-01-01', '08011', 930)
>>> electro1(df, 'Serveis', '0-6')    # doctesttag: +TAG=5_electro_1
('2022-03-27', '08009', 13436)
>>> electro1(df, 'Serveis', '6-12')    # doctesttag: +TAG=5_electro_1
('2022-01-01', '08012', 16644)
>>> electro1(df, 'Serveis', '12-18')    # doctesttag: +TAG=5_electro_1
('2022-03-27', '08009', 19521)
>>> electro1(df, 'No especificat', '6-12')  # doctesttag: +TAG=5_electro_1
('2022-03-20', '08015', 11)
>>> electro1(df, 'No especificat', '12-18')  # doctesttag: +TAG=5_electro_1
('2022-03-13', '08015', 10)
>>> electro1(df, 'No especificat', '18-24')  # doctesttag: +TAG=5_electro_1
('2022-03-06', '08015', 10)

Pandas: electro2

>>> from electro import electro2
>>> df = pd.read_csv('consum_elect.csv', dtype = {'Codi_Postal': str})
>>> se1 = electro2(df, 1)
>>> type(se1)                                 # doctesttag: +TAG=5_electro_2
<class 'pandas.core.series.Series'>
>>> se1 = se1.apply(int).sort_values(ascending= False)
>>> se1                                       # doctesttag: +TAG=5_electro_2
Sector_Economic
Serveis           53
Residencial       41
Indústria          5
No especificat     0
Name: Valor, dtype: int64
>>> se2 = electro2(df, 2).sort_values(ascending= False)
>>> se2 = se2.apply(int)
>>> se2                                       # doctesttag: +TAG=5_electro_2
Sector_Economic
Serveis           55
Residencial       38
Indústria          5
No especificat     0
Name: Valor, dtype: int64
>>> df1 = df[df['Tram_Horari'] == '12-18']
>>> se3 = electro2(df1, 1)
>>> se3 = se3.apply(lambda x: round(x, 2))
>>> se3                                    # doctesttag: +TAG=5_electro_2
Sector_Economic
Serveis           54.99
Residencial       39.88
Indústria          5.04
No especificat     0.09
Name: Valor, dtype: float64
>>> se4 = electro2(df1, 2)
>>> se4 = se4.apply(lambda x: round(x, 2))
>>> se4                                     # doctesttag: +TAG=5_electro_2
Sector_Economic
Serveis           57.98
Residencial       36.54
Indústria          5.38
No especificat     0.10
Name: Valor, dtype: float64
>>> se5 = electro2(df1, 3)
>>> se5 = se5.apply(lambda x: round(x, 2))
>>> se5                                     # doctesttag: +TAG=5_electro_2
Sector_Economic
Serveis           58.31
Residencial       36.18
Indústria          5.40
No especificat     0.11
Name: Valor, dtype: float64