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)