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