Solució de l’examen final torn 2 d’Ampliació d’Informàtica¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
8 de gener de 2024
- Durada:
90 minuts
- Copyright:
Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons
Jocs de proves¶
Aquests jocs de proves necessiten el fitxer meteo2.csv.
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG
Esquema del sistema fluvial del joc de proves:
A +–B | +–C | | +–D | | +–E | | +–F | +–G | | +–H | | | +–I | +–J | +–K +–L . +–M . +–N . +–O . +–W
P +–Q | +–R | +–S | +–T | +–U | +–V . +–X . +–Y . +–Z
>>> lrius = [ 'BA', 'CB', 'DC', 'ED', 'FE',
... 'GB', 'HG', 'IB', 'JI', 'KI',
... 'LA', 'ML', 'NL', 'OL', 'WL',
... 'QP', 'RQ', 'SP', 'TS', 'US',
... 'VP', 'XV', 'YX', 'ZX' ]
>>> import networkx as nx
Test afegeix_cabals¶
>>> from rius import afegeix_cabals
>>> g1 = nx.DiGraph(lrius)
>>> g2 = nx.DiGraph(lrius[:10])
>>> afegeix_cabals(g1, {'A': 1234})
>>> g1.nodes['A'] # doctesttag: +TAG=1_cabals
{'cabal': 1234}
>>> dcabals = {'B': 10, 'C': 20, 'D': 30, 'E': 40}
>>> afegeix_cabals(g2, dcabals)
>>> sorted(g2.nodes(data=True)) # doctesttag: +TAG=1_cabals
[('A', {}), ('B', {'cabal': 10}), ('C', {'cabal': 20}), ('D', {'cabal': 30}), ('E', {'cabal': 40}), ('F', {}), ('G', {}), ('H', {}), ('I', {}), ('J', {}), ('K', {})]
>>> afegeix_cabals(g1, dcabals)
>>> sorted(g1.nodes(data=True)) # doctesttag: +TAG=1_cabals
[('A', {'cabal': 1234}), ('B', {'cabal': 10}), ('C', {'cabal': 20}), ('D', {'cabal': 30}), ('E', {'cabal': 40}), ('F', {}), ('G', {}), ('H', {}), ('I', {}), ('J', {}), ('K', {}), ('L', {}), ('M', {}), ('N', {}), ('O', {}), ('P', {}), ('Q', {}), ('R', {}), ('S', {}), ('T', {}), ('U', {}), ('V', {}), ('W', {}), ('X', {}), ('Y', {}), ('Z', {})]
>>> dcabals = {r:v for r,v in zip('FGHIJK',range(7, 100, 5))}
>>> afegeix_cabals(g2, dcabals)
>>> sorted(g2.nodes(data=True)) # doctesttag: +TAG=1_cabals
[('A', {}), ('B', {'cabal': 10}), ('C', {'cabal': 20}), ('D', {'cabal': 30}), ('E', {'cabal': 40}), ('F', {'cabal': 7}), ('G', {'cabal': 12}), ('H', {'cabal': 17}), ('I', {'cabal': 22}), ('J', {'cabal': 27}), ('K', {'cabal': 32})]
>>> afegeix_cabals(g2, {'A':777, 'Z':666, 'W':'hola'})
>>> sorted(g2.nodes(data=True)) # doctesttag: +TAG=1_cabals
[('A', {'cabal': 777}), ('B', {'cabal': 10}), ('C', {'cabal': 20}), ('D', {'cabal': 30}), ('E', {'cabal': 40}), ('F', {'cabal': 7}), ('G', {'cabal': 12}), ('H', {'cabal': 17}), ('I', {'cabal': 22}), ('J', {'cabal': 27}), ('K', {'cabal': 32})]
>>> afegeix_cabals(g1, {'N':777, 'Ñ':1312, 'W':432})
>>> sorted(g1.nodes(data=True)) # doctesttag: +TAG=1_cabals
[('A', {'cabal': 1234}), ('B', {'cabal': 10}), ('C', {'cabal': 20}), ('D', {'cabal': 30}), ('E', {'cabal': 40}), ('F', {}), ('G', {}), ('H', {}), ('I', {}), ('J', {}), ('K', {}), ('L', {}), ('M', {}), ('N', {'cabal': 777}), ('O', {}), ('P', {}), ('Q', {}), ('R', {}), ('S', {}), ('T', {}), ('U', {}), ('V', {}), ('W', {'cabal': 432}), ('X', {}), ('Y', {}), ('Z', {})]
Tests max_tributaris¶
>>> from rius import max_tributaris
>>> g1 = nx.DiGraph(lrius)
>>> g2 = nx.DiGraph(lrius[:10])
>>> max_tributaris(g1, 'A') # doctesttag: +TAG=1_tributaris
'B'
>>> max_tributaris(g1, 'B') # doctesttag: +TAG=1_tributaris
'C'
>>> max_tributaris(g1, 'C') # doctesttag: +TAG=1_tributaris
'D'
>>> max_tributaris(g1, 'P') # doctesttag: +TAG=1_tributaris
'V'
>>> max_tributaris(g1, 'V') # doctesttag: +TAG=1_tributaris
'X'
>>> max_tributaris(g2, 'A') # doctesttag: +TAG=1_tributaris
'B'
>>> g1.add_edge('P','B')
>>> max_tributaris(g1, 'B') # doctesttag: +TAG=1_tributaris
'P'
>>> max_tributaris(g1, 'Q') # doctesttag: +TAG=1_tributaris
'R'
>>> nx.add_path(g2, '123456G')
>>> max_tributaris(g2, 'G') # doctesttag: +TAG=1_tributaris
'6'
>>> max_tributaris(g2, 'B') # doctesttag: +TAG=1_tributaris
'G'
Tests elimina_n¶
>>> from eliminacio import elimina_n
>>> elimina_n([0, 1, 2, 3, 4, 5, 6, 7, 8], 3) # doctesttag: +TAG=2_elimina
[1, 2, 4, 5, 7, 8]
>>> elimina_n(list(range(20)), 2) # doctesttag: +TAG=2_elimina
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
>>> elimina_n(list(range(21)), 3) # doctesttag: +TAG=2_elimina
[1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20]
>>> elimina_n(elimina_n(list(range(21)), 3), 2) # doctesttag: +TAG=2_elimina
[2, 5, 8, 11, 14, 17, 20]
>>> elimina_n(list('esternocleidomastoideu'), 4) # doctesttag: +TAG=2_elimina
['s', 't', 'e', 'n', 'o', 'c', 'e', 'i', 'd', 'm', 'a', 's', 'o', 'i', 'd', 'u']
>>> elimina_n(['a'*n for n in range(9)], 7) # doctesttag: +TAG=2_elimina
['a', 'aa', 'aaa', 'aaaa', 'aaaaa', 'aaaaaa', 'aaaaaaaa']
>>> elimina_n([list(range(n%3)) for n in range(10)], 5) # doctesttag: +TAG=2_elimina
[[0], [0, 1], [], [0], [], [0], [0, 1], []]
>>> elimina_n([ [7] * (n%4) for n in range(20)], 9) # doctesttag: +TAG=2_elimina
[[7], [7, 7], [7, 7, 7], [], [7], [7, 7], [7, 7, 7], [], [7, 7], [7, 7, 7], [], [7], [7, 7], [7, 7, 7], [], [7], [7, 7, 7]]
>>> elimina_n([1], 567) # doctesttag: +TAG=2_elimina
[]
>>> elimina_n([], 789) # doctesttag: +TAG=2_elimina
[]
Tests sensacio_termica¶
>>> import pandas as pd
>>> df = pd.read_csv('meteo2.csv', index_col=0)
>>> from meteo import sensacio_termica
>>> sensacio_termica(df.loc[:10]) # doctesttag: +TAG=3_sensacio_termica
DIA
5 0.7
7 1.5
Name: STERM, dtype: float64
>>> a = sensacio_termica(df[:18])
>>> a.values # doctesttag: +TAG=3_sensacio_termica
array([ 0.7, 1.5, 2.1, -3.5])
>>> sensacio_termica(df) # doctesttag: +TAG=3_sensacio_termica
DIA
5 0.7
7 1.5
16 2.1
18 -3.5
26 -0.9
31 6.4
Name: STERM, dtype: float64
>>> df['V_VENT_MITJ'] = 6.0
>>> sensacio_termica(df.loc[:15]) # doctesttag: +TAG=3_sensacio_termica
DIA
1 0.7
2 1.3
3 1.5
4 2.7
5 0.7
6 -0.4
7 1.5
8 2.1
9 -1.7
10 1.3
11 3.0
12 4.1
13 2.5
14 -0.7
15 -0.9
Name: STERM, dtype: float64
>>> sensacio_termica(df) # doctesttag: +TAG=3_sensacio_termica
DIA
1 0.7
2 1.3
3 1.5
4 2.7
5 0.7
6 -0.4
7 1.5
8 2.1
9 -1.7
10 1.3
11 3.0
12 4.1
13 2.5
14 -0.7
15 -0.9
16 2.1
17 -2.4
18 -3.5
19 -1.3
20 1.6
21 1.9
22 2.3
23 2.7
24 1.3
25 -1.5
26 -0.9
27 2.9
28 5.0
29 2.3
30 3.9
31 6.4
Name: STERM, dtype: float64
Tests rafegues_vent¶
>>> import pandas as pd
>>> df = pd.read_csv('meteo2.csv', index_col=0)
>>> from meteo import rafegues_vent
>>> d = rafegues_vent(df)
>>> d == {'E': 40.3, 'N': 27.3, 'NO': 48.0, 'O': 14.0, 'ONO': 51.3, 'S': 16.9, 'SE': 35.6, 'SEE': 24.3, 'SO': 14.1} # doctesttag: +TAG=3_rafegues_vent
True
>>> d = rafegues_vent(df.loc[:10])
>>> d == {'NO': 13.4, 'O': 14.0, 'ONO': 19.4, 'S': 16.9, 'SE': 16.3, 'SEE': 24.3, 'SO': 14.1} # doctesttag: +TAG=3_rafegues_vent
True
>>> d = rafegues_vent(df.loc[10:20])
>>> d == {'E': 40.3, 'N': 16.4, 'NO': 48.0, 'SE': 35.6, 'SEE': 24.3} # doctesttag: +TAG=3_rafegues_vent
True
>>> d = rafegues_vent(df.loc[20:])
>>> d == {'N': 27.3, 'NO': 48.0, 'ONO': 51.3} # doctesttag: +TAG=3_rafegues_vent
True
>>> d = rafegues_vent(df.loc[::2])
>>> d == {'E': 40.3, 'N': 27.3, 'NO': 40.0, 'ONO': 39.0, 'SE': 35.6, 'SO': 14.1} # doctesttag: +TAG=3_rafegues_vent
True