Solució del final d’Informàtica

Organització:

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

Data:

23 de gener de 2023

Copyright:

Reconeixement-CompartirIgual 3.0 No adaptada de Creative Commons

Durada:

1 hora i 50 minuts

Jocs de proves

Tests per TrenExtra

>>> from tren import Tren
>>> from vago import Vago
>>> from trenextra import TrenExtra
>>> t = TrenExtra('XXX', 200)
>>> t.nom                                # doctesttag:+TAG=1_trenextra-init
'XXX'
>>> t.vmax                              # doctesttag:+TAG=1_trenextra-init
200
>>> t.quants_capacitat(30)               # doctesttag:+TAG=1_trenextra-cap
0
>>> t.afegir_vago(Vago('v1', 8, 18))
>>> t.quants_capacitat(30)                # doctesttag:+TAG=1_trenextra-cap
0
>>> t.quants_capacitat(20)             # doctesttag:+TAG=1_trenextra-cap
1
>>> t.afegir_vago(Vago('v2', 2, 10))
>>> t.afegir_vago(Vago('v3', 14, 11))
>>> t.afegir_vago(Vago('v4', 15, 12))
>>> t.quants_capacitat(20)             # doctesttag:+TAG=1_trenextra-cap
3
>>> t.quants_capacitat(25)             # doctesttag:+TAG=1_trenextra-cap
3
>>> t.quants_capacitat(26)             # doctesttag:+TAG=1_trenextra-cap
2
>>> t2 = TrenExtra('YYY', 130)
>>> t2.nom                                # doctesttag:+TAG=1_trenextra-init
'YYY'
>>> t2.vmax                             # doctesttag:+TAG=1_trenextra-init
130
>>> t2.quants_capacitat(30)               # doctesttag:+TAG=1_trenextra-cap
0
>>> t2.afegir_vago(Vago('v11', 18, 18))
>>> t2.quants_capacitat(30)                # doctesttag:+TAG=1_trenextra-cap
1
>>> t2.quants_capacitat(100)             # doctesttag:+TAG=1_trenextra-cap
0
>>> t2.afegir_vago(Vago('v21', 2, 10))
>>> t2.quants_capacitat(30)                # doctesttag:+TAG=1_trenextra-cap
1
>>> t2.quants_capacitat(10)                # doctesttag:+TAG=1_trenextra-cap
2
>>> t2.afegir_vago(Vago('v31', 24, 11))
>>> t2.afegir_vago(Vago('v41', 25, 12))
>>> t2.quants_capacitat(20)             # doctesttag:+TAG=1_trenextra-cap
3
>>> t2.quants_capacitat(10)             # doctesttag:+TAG=1_trenextra-cap
4
>>> t2.quants_capacitat(35)             # doctesttag:+TAG=1_trenextra-cap
3
>>> t2.quants_capacitat(36)             # doctesttag:+TAG=1_trenextra-cap
2
>>> t2.quants_capacitat(37)             # doctesttag:+TAG=1_trenextra-cap
1

Tests per puntrec

>>> from punt2D import Punt2D
>>> from puntrec import punt_mes_allunyat
>>> llista = []
>>> punt = Punt2D(0, 0)
>>> p1, p2, p3, p4, p5, p6 = Punt2D(3, 4), Punt2D(-3, -4), Punt2D(7, 7), Punt2D(0, 3), Punt2D(3, 0), Punt2D(8, 3)
>>> llista = [p1]
>>> punt_mes_allunyat(llista, punt)  # doctesttag:+TAG=2_puntrec
(3, 4)
>>> llista == [p1]    # doctesttag:+TAG=2_puntrec
True
>>> llista.append(p2)
>>> punt_mes_allunyat(llista, punt)  # doctesttag:+TAG=2_puntrec
(3, 4)
>>> llista == [p1, p2]   # doctesttag:+TAG=2_puntrec
True
>>> llista.extend([p3, p4, p5, p6])
>>> punt_mes_allunyat(llista, punt)   # doctesttag:+TAG=2_puntrec
(7, 7)
>>> llista = [Punt2D(1.5, 1.5), Punt2D(5.6, 8.9), Punt2D(100, 100), Punt2D(20, 30)]
>>> punt_mes_allunyat(llista, Punt2D(-1, 3))   # doctesttag:+TAG=2_puntrec
(100, 100)
>>> punt_mes_allunyat(llista, Punt2D(100, 100))   # doctesttag:+TAG=2_puntrec
(1.5, 1.5)
>>> punt_mes_allunyat(llista, Punt2D(20, 30))   # doctesttag:+TAG=2_puntrec
(100, 100)

Tests per grafs: avis

>>> import networkx as nx
>>> from datetime import date
>>> def afegir_persona(g, nom, data, mare, pare):
...    g.add_node(nom, naix=data)
...    if mare != '':
...        g.add_edge(mare, nom)
...    if pare != '':
...        g.add_edge(pare, nom)
>>> g = nx.DiGraph()
>>> afegir_persona(g, 'A1', date(1911, 12, 1), '', '')
>>> afegir_persona(g, 'A2', date(1911, 11, 3), '', '')
>>> afegir_persona(g, 'A3', date(1912, 5, 21), '', '')
>>> afegir_persona(g, 'A4', date(1912, 6, 22), '', '')
>>> afegir_persona(g, 'A5', date(1913, 10, 21), '', '')
>>> afegir_persona(g, 'A6', date(1915, 6, 10), '', '')
>>> afegir_persona(g, 'E4', date(2022, 7, 10), 'D6', '')
>>> afegir_persona(g, 'B1', date(1930, 8, 11), '', '')
>>> afegir_persona(g, 'B2', date(1931, 1, 17), 'A1', 'A2')
>>> afegir_persona(g, 'B3', date(1930, 3, 5), 'A1', 'A2')
>>> afegir_persona(g, 'B4', date(1934, 2, 6), 'A3', 'A6')
>>> afegir_persona(g, 'B5', date(1931, 7, 12), 'A4', 'A5')
>>> afegir_persona(g, 'B6', date(1932, 4, 10), '', '')
>>> afegir_persona(g, 'B7', date(1930, 1, 11), '', '')
>>> afegir_persona(g, 'B8', date(1933, 9, 8), '', '')
>>> afegir_persona(g, 'C1', date(1961, 7, 21), 'B1', 'B2')
>>> afegir_persona(g, 'C2', date(1962, 8, 25), 'B7', 'B8')
>>> afegir_persona(g, 'C3', date(1963, 2, 22), 'B3', 'B4')
>>> afegir_persona(g, 'C4', date(1960, 3, 2), 'B5', 'B6')
>>> afegir_persona(g, 'C5', date(1965, 11, 4 ), 'B5', 'B6')
>>> afegir_persona(g, 'D1', date(1991, 10, 6), '', '')
>>> afegir_persona(g, 'D2', date(1992, 12, 31), 'C1', 'C2')
>>> afegir_persona(g, 'D3', date(1993, 10, 30), 'C1', 'C2')
>>> afegir_persona(g, 'D4', date(1991, 11, 21), 'C3', '')
>>> afegir_persona(g, 'D5', date(1990, 12, 2), 'C4', '')
>>> afegir_persona(g, 'D6', date(1991, 2, 3), 'C4', '')
>>> afegir_persona(g, 'E1', date(2020, 5, 29), 'D1', 'D2')
>>> afegir_persona(g, 'E2', date(2021, 10, 17), 'D4', 'D5')
>>> afegir_persona(g, 'E3', date(2022, 5, 8), 'D4', 'D5')
>>> afegir_persona(g, 'E4', date(2022, 7, 10), 'D6', '')
>>> from familiars import avis
>>> avis(g, 'E2')    # doctesttag: +TAG=3_familiars-avis
[('C3', datetime.date(1963, 2, 22)), ('C4', datetime.date(1960, 3, 2))]
>>> avis(g, 'E3')    # doctesttag: +TAG=3_familiars-avis
[('C3', datetime.date(1963, 2, 22)), ('C4', datetime.date(1960, 3, 2))]
>>> avis(g, 'E4')    # doctesttag: +TAG=3_familiars-avis
[('C4', datetime.date(1960, 3, 2))]
>>> avis(g, 'D2')    # doctesttag: +TAG=3_familiars-avis
[('B1', datetime.date(1930, 8, 11)), ('B2', datetime.date(1931, 1, 17)), ('B7', datetime.date(1930, 1, 11)), ('B8', datetime.date(1933, 9, 8))]
>>> avis(g, 'D3')    # doctesttag: +TAG=3_familiars-avis
[('B1', datetime.date(1930, 8, 11)), ('B2', datetime.date(1931, 1, 17)), ('B7', datetime.date(1930, 1, 11)), ('B8', datetime.date(1933, 9, 8))]
>>> avis(g, 'D6')    # doctesttag: +TAG=3_familiars-avis
[('B5', datetime.date(1931, 7, 12)), ('B6', datetime.date(1932, 4, 10))]
>>> avis(g, 'C3')    # doctesttag: +TAG=3_familiars-avis
[('A1', datetime.date(1911, 12, 1)), ('A2', datetime.date(1911, 11, 3)), ('A3', datetime.date(1912, 5, 21)), ('A6', datetime.date(1915, 6, 10))]
>>> avis(g, 'C5')    # doctesttag: +TAG=3_familiars-avis
[('A4', datetime.date(1912, 6, 22)), ('A5', datetime.date(1913, 10, 21))]

Tests per grafs: matben

>>> from familiars import matben
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbengeneral
('A2', 'E3')
>>> g.remove_node('A2')
>>> g.remove_node('E3')
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbengeneral
('A4', 'E4')
>>> g.remove_node('E1')
>>> g.remove_node('E2')
>>> g.remove_node('E4')
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbenvabesensehaspath
('A1', 'D3')
>>> g.remove_node('D3')
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbenvabesensehaspath
('A1', 'D2')
>>> g.remove_node('A1')
>>> g.remove_node('A3')
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbengeneral
('A4', 'D6')
>>> g.remove_node('A4')
>>> g.remove_node('A5')
>>> g.remove_node('A6')
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbenvabesensehaspath
('B7', 'D2')
>>> g.remove_node('B7')
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbengeneral
('B1', 'D2')
>>> g.remove_node('B1')
>>> matben(g)    # doctesttag: +TAG=3_familiars-matbengeneral
('B2', 'D2')

Tests per meteo: var_temp_plujos

>>> import pandas as pd
>>> df1 = pd.read_csv('meteo1.csv', index_col=0)
>>> from meteo import var_temp_plujos
>>> round(var_temp_plujos(df1), 1)    # doctesttag: +TAG=4_pandas-plujos
4.9
>>> round(var_temp_plujos(df1[:10]), 1)    # doctesttag: +TAG=4_pandas-plujos
13.2
>>> round(var_temp_plujos(df1[:15]), 1)    # doctesttag: +TAG=4_pandas-plujos
4.3
>>> round(var_temp_plujos(df1[10:20]), 1)    # doctesttag: +TAG=4_pandas-plujos
10.5
>>> round(var_temp_plujos(df1[15:25]), 1)    # doctesttag: +TAG=4_pandas-plujos
3.5

Tests per meteo: direccions_vent

>>> df1 = pd.read_csv('meteo1.csv', index_col=0)
>>> from meteo import direccions_vent
>>> d = direccions_vent(df1)
>>> d == {'???': 7, 'NO': 5, 'ONO': 4, 'SE': 3, 'N': 3, 'E': 2, 'SEE': 2, 'SO': 2, 'S': 1, 'O': 1, ' ': 1}    # doctesttag: +TAG=4_pandas-vent
True
>>> d = direccions_vent(df1[:10])
>>> d == {'NO': 2, 'SO': 2, 'ONO': 1, 'SE': 1, 'SEE': 1, 'S': 1, 'O': 1, '???': 1}    # doctesttag: +TAG=4_pandas-vent
True
>>> d = direccions_vent(df1[10:20])
>>> d == {'SE': 2, 'NO': 2, 'E': 2, ' ': 1, 'SEE': 1, 'N': 1, '???': 1}    # doctesttag: +TAG=4_pandas-vent
True
>>> d = direccions_vent(df1[20:])
>>> d == {'???': 5, 'ONO': 3, 'N': 2, 'NO': 1}    # doctesttag: +TAG=4_pandas-vent
True
>>> d = direccions_vent(df1[::2])
>>> d == {'???': 5, 'NO': 2, 'SO': 2, 'ONO': 2, 'SE': 2, 'N': 1, ' ': 1, 'E': 1}   # doctesttag: +TAG=4_pandas-vent
True