Solució del final d’Informàtica¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
20 de juny de 2023
- Durada:
1 hora i 30 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_xarxa_metro(n=10):
... g = nx.Graph()
... linies = [
... ['AA', 'a1', '12', 'a2', 'a3', '14', 'a4'] ,
... ['BB', 'b1', '12', 'b2', '14', 'b3'] ,
... ['CC', 'c1', '14', 'c2', '12', 'c3'] ,
... ['DD', 'd1', 'a2', '12', 'd2', 'd3', 'd4'] ,
... ['L1', '10', '11', '12', '13', '14', '15'] ,
... ['L2', '20', '11', '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', '11', '53', '54', '55'] ,
... ['XX', 'x1', 'x2', 'x3', 'x4', 'x5', 'x6'] ,
... ]
... for lin in linies[:n]:
... nx.add_path(g, lin[1:], linia=lin[0])
... return g
Doctests per a quines_linies¶
>>> from mes_metro import quines_linies
>>> g = crea_xarxa_metro()
>>> quines_linies(g, '11', '13') # doctesttag: +TAG=1_quines_linies
['L1', 'L3', 'L4']
>>> quines_linies(g, '10', '14') # doctesttag: +TAG=1_quines_linies
['L1']
>>> quines_linies(g, '20', '40') # doctesttag: +TAG=1_quines_linies
[]
>>> quines_linies(g, '11', '14') # doctesttag: +TAG=1_quines_linies
['L1', 'L2', 'L5']
>>> quines_linies(g, '12', '14') # doctesttag: +TAG=1_quines_linies
['AA', 'BB', 'CC', 'L1']
>>> quines_linies(g, 'a2', '12') # doctesttag: +TAG=1_quines_linies
['AA', 'DD']
>>> quines_linies(g, '32', '35') # doctesttag: +TAG=1_quines_linies
['L3']
>>> quines_linies(g, '28', '13') # doctesttag: +TAG=1_quines_linies
[]
>>> quines_linies(g, 'x1', 'x3') # doctesttag: +TAG=1_quines_linies
['XX']
>>> quines_linies(g, '11', '12') # doctesttag: +TAG=1_quines_linies
['L1']
Doctests per a transbordaments¶
>>> from mes_metro import transbordaments
>>> g = crea_xarxa_metro()
>>> transbordaments(g, 'L1') # doctesttag: +TAG=1_transbordaments
['AA', 'BB', 'CC', 'DD', 'L2', 'L3', 'L4', 'L5']
>>> transbordaments(g, 'L2') # doctesttag: +TAG=1_transbordaments
['AA', 'BB', 'CC', 'L1', 'L3', 'L4', 'L5']
>>> transbordaments(g, 'L3') # doctesttag: +TAG=1_transbordaments
['L1', 'L2', 'L4', 'L5']
>>> transbordaments(g, 'L4') # doctesttag: +TAG=1_transbordaments
['L1', 'L2', 'L3', 'L5']
>>> transbordaments(g, 'L5') # doctesttag: +TAG=1_transbordaments
['AA', 'BB', 'CC', 'L1', 'L2', 'L3', 'L4']
>>> transbordaments(g, 'AA') # doctesttag: +TAG=1_transbordaments
['BB', 'CC', 'DD', 'L1', 'L2', 'L5']
>>> transbordaments(g, 'XX') # doctesttag: +TAG=1_transbordaments
[]
>>> g = crea_xarxa_metro(6)
>>> transbordaments(g, 'BB') # doctesttag: +TAG=1_transbordaments
['AA', 'CC', 'DD', 'L1', 'L2']
>>> transbordaments(g, 'CC') # doctesttag: +TAG=1_transbordaments
['AA', 'BB', 'DD', 'L1', 'L2']
>>> transbordaments(g, 'DD') # doctesttag: +TAG=1_transbordaments
['AA', 'BB', 'CC', 'L1']
Doctests per a perimetre¶
>>> from punt2D import Punt2D
>>> from poligon import Poligon
>>> import perimetre
>>> import punt2D
>>> import poligon
>>> import perimetre
>>> p1 = Poligon()
>>> p1.afegir_vertex(Punt2D(1, 1))
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p1))) # doctesttag: +TAG=2_perimetre
0.00
>>> p2 = Poligon()
>>> p2.afegir_vertex(Punt2D(0, 0))
>>> p2.afegir_vertex(Punt2D(0, 1))
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p2))) # doctesttag: +TAG=2_perimetre
2.00
>>> p3 = Poligon()
>>> p3.afegir_vertex(Punt2D(0, 0))
>>> p3.afegir_vertex(Punt2D(0, 1))
>>> p3.afegir_vertex(Punt2D(0, 2))
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p3))) # doctesttag: +TAG=2_perimetre
4.00
>>> p4 = Poligon()
>>> p4.afegir_vertex(Punt2D(0, 0))
>>> p4.afegir_vertex(Punt2D(0, 2))
>>> p4.afegir_vertex(Punt2D(-1, 2))
>>> p4.afegir_vertex(Punt2D(-1, 0))
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p4))) # doctesttag: +TAG=2_perimetre
6.00
>>> p5 = Poligon()
>>> p5.afegir_vertex(Punt2D(0, 1))
>>> p5.afegir_vertex(Punt2D(4, 3))
>>> perimetre.calcul_perimetre(p5)== 2*Punt2D(0, 1).dist(Punt2D(4, 3)) # doctesttag: +TAG=2_perimetre
True
>>> p5.afegir_vertex(Punt2D(-4, -7))
>>> p5.afegir_vertex(Punt2D(10, -9))
>>> p5.afegir_vertex(Punt2D(8, -7))
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p5))) # doctesttag: +TAG=2_perimetre
45.56
>>> p5.afegir_vertex(Punt2D(2, -1))
>>> p5.afegir_vertex(Punt2D(3, 2))
>>> p5.afegir_vertex(Punt2D(-3, 5))
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p5))) # doctesttag: +TAG=2_perimetre
57.60
>>> p5.afegir_vertex(Punt2D(-6, -7))
>>> p5.afegir_vertex(Punt2D(1, -5))
>>> p5.afegir_vertex(Punt2D(2, 0))
>>> p5.afegir_vertex(Punt2D(0, 0))
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p5))) # doctesttag: +TAG=2_perimetre
80.35
>>> p5.afegir_vertex(Punt2D(0, -2))
>>> p5.afegir_vertex(Punt2D(2, -2))
>>> p5.afegir_vertex(Punt2D(-8, -9))
>>> per = perimetre.calcul_perimetre(p5)
>>> print('{:.2f}'.format(perimetre.calcul_perimetre(p5))) # doctesttag: +TAG=2_perimetre
108.37
Doctests per a electra1¶
>>> import pandas as pd
>>> df = pd.read_csv('consum_elect.csv', dtype = {'Codi_Postal': str})
>>> from electra import electra1
>>> df1 = df[df['Tram_Horari'] == '0-6']
>>> dfe1 = electra1(df1)
>>> type (dfe1)
<class 'pandas.core.frame.DataFrame'>
>>> len(dfe1) # doctesttag: +TAG=3_electra_1
56
>>> tuple(dfe1.iloc[0]) # doctesttag: +TAG=3_electra_1
('2022-02-12', '08018', 'Serveis', '0-6', 76090)
>>> tuple(dfe1.iloc[len(dfe1)-1]) # doctesttag: +TAG=3_electra_1
('2022-02-15', '08018', 'Serveis', '0-6', 72314)
>>> list(dfe1['Valor'][:5]) # doctesttag: +TAG=3_electra_1
[76090, 75487, 75065, 75011, 74901]
>>> list(dfe1['Valor'][-5:]) # doctesttag: +TAG=3_electra_1
[72423, 72411, 72387, 72331, 72314]
>>> dfe1['Valor'].iloc[52] # doctesttag: +TAG=3_electra_1
72411
>>> dfe1['Valor'].iloc[49] # doctesttag: +TAG=3_electra_1
72455
>>> dfe1['Valor'].iloc[54] # doctesttag: +TAG=3_electra_1
72331
>>> dfe1['Data'].iloc[12] # doctesttag: +TAG=3_electra_1
'2022-03-12'
>>> dfe1['Data'].iloc[14] # doctesttag: +TAG=3_electra_1
'2022-01-28'
>>> df2 = df[12000:]
>>> dfe2 = electra1(df2)
>>> type (dfe2)
<class 'pandas.core.frame.DataFrame'>
>>> len(dfe2) # doctesttag: +TAG=3_electra_1
17
>>> tuple(dfe2.iloc[0]) # doctesttag: +TAG=3_electra_1
('2022-03-08', '08018', 'Serveis', '12-18', 149134)
>>> tuple(dfe2.iloc[len(dfe2)-1]) # doctesttag: +TAG=3_electra_1
('2022-03-30', '08018', 'Serveis', '12-18', 141955)
>>> list(dfe2['Valor'][:5]) # doctesttag: +TAG=3_electra_1
[149134, 147902, 147836, 147494, 147115]
>>> list(dfe2['Valor'][-5:]) # doctesttag: +TAG=3_electra_1
[143066, 142990, 142720, 142498, 141955]
>>> dfe2['Valor'].iloc[5] # doctesttag: +TAG=3_electra_1
146674
>>> dfe2['Data'].iloc[6] # doctesttag: +TAG=3_electra_1
'2022-02-16'
>>> dfe2['Data'].iloc[7] # doctesttag: +TAG=3_electra_1
'2022-03-14'
>>> dfe2['Valor'].iloc[8] # doctesttag: +TAG=3_electra_1
145782
>>> dfe2['Valor'].iloc[10] # doctesttag: +TAG=3_electra_1
143228
>>> df3 = df[12000:].sort_values('Valor', ascending=False)
>>> dfe3 = electra1(df3)
>>> type (dfe3)
<class 'pandas.core.frame.DataFrame'>
>>> len(dfe3) # doctesttag: +TAG=3_electra_1
17
>>> tuple(dfe3.iloc[0]) # doctesttag: +TAG=3_electra_1
('2022-03-08', '08018', 'Serveis', '12-18', 149134)
>>> tuple(dfe3.iloc[len(dfe3)-1]) # doctesttag: +TAG=3_electra_1
('2022-03-30', '08018', 'Serveis', '12-18', 141955)
>>> list(dfe3['Valor'][:5]) # doctesttag: +TAG=3_electra_1
[149134, 147902, 147836, 147494, 147115]
>>> list(dfe3['Valor'][-5:]) # doctesttag: +TAG=3_electra_1
[143066, 142990, 142720, 142498, 141955]
>>> dfe3['Valor'].iloc[5] # doctesttag: +TAG=3_electra_1
146674
>>> dfe3['Data'].iloc[6] # doctesttag: +TAG=3_electra_1
'2022-02-16'
>>> dfe3['Data'].iloc[7] # doctesttag: +TAG=3_electra_1
'2022-03-14'
>>> dfe3['Valor'].iloc[8] # doctesttag: +TAG=3_electra_1
145782
>>> dfe3['Valor'].iloc[10] # doctesttag: +TAG=3_electra_1
143228
>>> dfe3['Data'].iloc[11] # doctesttag: +TAG=3_electra_1
'2022-02-24'
Doctests per electra2¶
>>> df = pd.read_csv('consum_elect.csv', dtype = {'Codi_Postal': str})
>>> from electra import electra2
>>> df1 = df[:5000]
>>> electra2(df1, 'Residencial') # doctesttag: +TAG=3_electra_2
('18-24', 21345697)
>>> electra2(df1, 'Indústria') # doctesttag: +TAG=3_electra_2
('12-18', 2393943)
>>> electra2(df1, 'Serveis') # doctesttag: +TAG=3_electra_2
('12-18', 26212986)
>>> electra2(df1, 'No especificat') # doctesttag: +TAG=3_electra_2
('12-18', 44766)
>>> df2 = df[9000:14000]
>>> electra2(df2, 'Residencial') # doctesttag: +TAG=3_electra_2
('18-24', 19125840)
>>> electra2(df2, 'Indústria') # doctesttag: +TAG=3_electra_2
('12-18', 2461680)
>>> electra2(df2, 'Serveis') # doctesttag: +TAG=3_electra_2
('12-18', 26468171)
>>> electra2(df2, 'No especificat') # doctesttag: +TAG=3_electra_2
('12-18', 45551)
>>> df3 = df[15000:20000]
>>> electra2(df3, 'Residencial') # doctesttag: +TAG=3_electra_2
('18-24', 18313421)
>>> electra2(df3, 'Indústria') # doctesttag: +TAG=3_electra_2
('12-18', 2498926)
>>> electra2(df3, 'Serveis') # doctesttag: +TAG=3_electra_2
('12-18', 26655955)
>>> electra2(df3, 'No especificat') # doctesttag: +TAG=3_electra_2
('12-18', 48093)
>>> df4 = df[20000:]
>>> electra2(df4, 'Residencial') # doctesttag: +TAG=3_electra_2
('18-24', 13615950)
>>> electra2(df4, 'Indústria') # doctesttag: +TAG=3_electra_2
('12-18', 1865758)
>>> electra2(df4, 'Serveis') # doctesttag: +TAG=3_electra_2
('12-18', 20504168)
>>> electra2(df4, 'No especificat') # doctesttag: +TAG=3_electra_2
('12-18', 41794)