Solució de l’examen final d’Ampliació d’Informàtica

Organització:

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

Data:

6 de juny de 2024

Durada:

1 hora i 55 minuts

Copyright:

Reconeixement-CompartirIgual 4.0 No adaptada de Creative Commons

Jocs de proves

Aquests jocs de proves necessiten el fitxer cincinnati.csv.

Els exemples que compten per la nota són només els que van seguits de # doctesttag: +TAG=

TESTS GRAFS

>>> import networkx as nx
>>> gx = nx.Graph()
>>> l=[
... 'Bruno',
... 'Jimena',
... 'Matilda',
... 'Borjamari',
... 'Cayetana',
... 'Caterina',
... 'Roger',
... 'Kevin',
... 'Jenny',
... 'Yanira',
... 'Eudald',
... 'Mariona',
... 'Meritxell',
... 'Arnau',
... 'Ramona',
... 'Ramon',
... 'Ramonet',
... 'Bruna',
... 'Mar',
... 'Mati',
... 'Bordona',
... 'Carla',
... 'Carlota',
... 'Ronna',
... 'Kerf',
... 'Jennyfer',
... 'Yang',
... 'Eulalia',
... 'Maria',
... 'Pol',
... 'Anna',
... 'Rang',
... 'Ralla',
... 'Rosa',]
>>> gx.add_nodes_from(l)
>>> gx.add_weighted_edges_from([
... ('Jimena', 'Bruno', 3),
... ('Bruno', 'Borjamari', 6),
... ('Jimena', 'Cayetana', 27),
... ('Matilda', 'Cayetana', 22),
... ('Borjamari', 'Cayetana', 5),
... ('Bruno', 'Cayetana', 6),
... ('Bruno', 'Bruna', 7),
... ('Ramon', 'Ramona', 15),
... ('Ramona', 'Ramonet', 22),
... ('Ramon', 'Ramonet', 5),
... ('Kevin', 'Jenny', 9),
... ('Jenny', 'Yanira', 4),],
... weight='minuts')
>>> nx.add_path(gx, l[17:], minuts=15)
>>> from xat import xerrameques
>>> xerrameques(gx, 1, 15)== {'Bruno', 'Borjamari', 'Jimena', 'Ramonet', 'Jenny', 'Anna', 'Ronna', 'Maria', 'Cayetana', 'Jennyfer', 'Mar', 'Carla', 'Ramona', 'Yang', 'Carlota', 'Bruna', 'Kerf', 'Ralla', 'Matilda', 'Rang', 'Bordona', 'Pol', 'Mati', 'Eulalia', 'Ramon'}  # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 2, 40)=={'Cayetana', 'Bruno'}  # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 3, 12)=={'Carla', 'Kerf', 'Anna', 'Bruno', 'Jimena', 'Maria', 'Ramon', 'Ramona', 'Cayetana', 'Jennyfer', 'Eulalia', 'Carlota', 'Pol', 'Yang', 'Mar', 'Bruna', 'Mati', 'Rang', 'Ramonet', 'Ronna', 'Bordona', 'Matilda', 'Ralla', 'Rosa'}   # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 4, 50)    # doctesttag: +TAG=1_xerrameques
set()
>>> xerrameques(gx, -1, 0)==set(gx.nodes())     # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 0, 100)=={'Yanira', 'Ramonet', 'Pol', 'Anna', 'Jimena', 'Borjamari', 'Mati', 'Ralla', 'Maria', 'Yang', 'Carla', 'Ronna', 'Jenny', 'Rosa', 'Kevin', 'Bruno', 'Ramona', 'Bordona', 'Mar', 'Kerf', 'Rang', 'Carlota', 'Bruna', 'Ramon', 'Matilda', 'Cayetana', 'Jennyfer', 'Eulalia'}     # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 9, 15)=={'Matilda', 'Jimena', 'Cayetana', 'Ramonet', 'Ramona'}    # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 2, 60)=={'Bruno', 'Cayetana'}    # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 0, 15)=={'Jimena', 'Bordona', 'Ralla', 'Matilda', 'Ramon', 'Bruno', 'Cayetana', 'Anna', 'Mati', 'Ramona', 'Maria', 'Kerf', 'Rang', 'Bruna', 'Yang', 'Ronna', 'Borjamari', 'Mar', 'Rosa', 'Jennyfer', 'Eulalia', 'Carla', 'Pol', 'Yanira', 'Carlota', 'Kevin', 'Ramonet', 'Jenny'}    # doctesttag: +TAG=1_xerrameques
True
>>> xerrameques(gx, 3, 15) =={'Jimena', 'Ramona', 'Ramonet', 'Matilda', 'Bruno', 'Cayetana'}   # doctesttag: +TAG=1_xerrameques
True
>>> gx = nx.Graph()
>>> l=[
... 'Bruno',
... 'Jimena',
... 'Matilda',
... 'Borjamari',
... 'Cayetana',
... 'Caterina',
... 'Roger',
... 'Kevin',
... 'Jenny',
... 'Yanira',
... 'Eudald',
... 'Mariona',
... 'Meritxell',
... 'Arnau',
... 'Ramona',
... 'Ramon',
... 'Ramonet',
... 'Bruna',
... 'Mar',
... 'Mati',
... 'Bordona',
... 'Carla',
... 'Carlota',
... 'Ronna',
... 'Kerf',
... 'Jennyfer',
... 'Yang',
... 'Eulalia',
... 'Maria',
... 'Pol',
... 'Anna',
... 'Rang',
... 'Ralla',
... 'Rosa',]
>>> gx.add_nodes_from(l)
>>> gx.add_weighted_edges_from([
... ('Jimena', 'Bruno', 3),
... ('Bruno', 'Borjamari', 6),
... ('Jimena', 'Cayetana', 27),
... ('Matilda', 'Cayetana', 22),
... ('Borjamari', 'Cayetana', 5),
... ('Ramon', 'Ramona', 15),
... ('Ramona', 'Ramonet', 22),
... ('Ramon', 'Ramonet', 5),
... ('Kevin', 'Jenny', 9),
... ('Jenny', 'Yanira', 4),],
... weight='minuts')
>>> nx.add_path(gx, l[17:], minuts=15)
>>> gx2 = gx.copy(gx)
>>> nx.add_cycle(gx2, l[:10], minuts=23)
>>> from xat import grup_xatejadors
>>> grup_xatejadors(gx, 'Jimena')  # doctesttag: +TAG=1_grup_xatejadors
(['Borjamari', 'Bruno', 'Cayetana', 'Matilda'], 63)
>>> grup_xatejadors(gx2, 'Bruno')  # doctesttag: +TAG=1_grup_xatejadors
(['Borjamari', 'Caterina', 'Cayetana', 'Jenny', 'Jimena', 'Kevin', 'Matilda', 'Roger', 'Yanira'], 285)
>>> grup_xatejadors(gx, 'Eudald')   # doctesttag: +TAG=1_grup_xatejadors
([], 0)
>>> grup_xatejadors(gx, 'Anna')   # doctesttag: +TAG=1_grup_xatejadors
(['Bordona', 'Bruna', 'Carla', 'Carlota', 'Eulalia', 'Jennyfer', 'Kerf', 'Mar', 'Maria', 'Mati', 'Pol', 'Ralla', 'Rang', 'Ronna', 'Rosa', 'Yang'], 240)
>>> grup_xatejadors(gx2, 'Arnau')   # doctesttag: +TAG=1_grup_xatejadors
([], 0)
>>> grup_xatejadors(gx2, 'Matilda')   # doctesttag: +TAG=1_grup_xatejadors
(['Borjamari', 'Bruno', 'Caterina', 'Cayetana', 'Jenny', 'Jimena', 'Kevin', 'Roger', 'Yanira'], 285)
>>> grup_xatejadors(gx2, 'Mariona')   # doctesttag: +TAG=1_grup_xatejadors
([], 0)
>>> gx.add_edge('Jimena', 'Ramonet', minuts=20)
>>> grup_xatejadors(gx, 'Ramonet')   # doctesttag: +TAG=1_grup_xatejadors
(['Borjamari', 'Bruno', 'Cayetana', 'Jimena', 'Matilda', 'Ramon', 'Ramona'], 125)
>>> grup_xatejadors(gx, 'Pol')   # doctesttag: +TAG=1_grup_xatejadors
(['Anna', 'Bordona', 'Bruna', 'Carla', 'Carlota', 'Eulalia', 'Jennyfer', 'Kerf', 'Mar', 'Maria', 'Mati', 'Ralla', 'Rang', 'Ronna', 'Rosa', 'Yang'], 240)
>>> gx.add_edge('Jimena', 'Pol', minuts=20)
>>> grup_xatejadors(gx, 'Pol')   # doctesttag: +TAG=1_grup_xatejadors
(['Anna', 'Bordona', 'Borjamari', 'Bruna', 'Bruno', 'Carla', 'Carlota', 'Cayetana', 'Eulalia', 'Jennyfer', 'Jimena', 'Kerf', 'Mar', 'Maria', 'Mati', 'Matilda', 'Ralla', 'Ramon', 'Ramona', 'Ramonet', 'Rang', 'Ronna', 'Rosa', 'Yang'], 385)

TESTS RECURSIVITAT

>>> from modifica import modifica_cond
>>> l0=[]
>>> modifica_cond(l0, lambda x : len(x)%2==0)
>>> l0    # doctesttag: +TAG=2_modifica_cond
[]
>>> l1=['caseta']
>>> modifica_cond(l1, lambda x : len(x)%2==1)
>>> l1    # doctesttag: +TAG=2_modifica_cond
['caseta']
>>> l2=['casa', 'res', 'llopet', 'reu', 'restanta']
>>> modifica_cond(l2, lambda x : len(x)>4)
>>> l2    # doctesttag: +TAG=2_modifica_cond
['casa', 'res', 'casa', 'reu', 'casa']
>>> l3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> modifica_cond(l3, lambda x : x%3 == 0)
>>> l3    # doctesttag: +TAG=2_modifica_cond
[1, 2, 1, 4, 5, 1, 7, 8, 1, 11, 1, 13, 14, 1, 16, 17, 1, 19, 20]
>>> l4 = 'ara vindra aquell temps de calor i fruita bona'.split()
>>> modifica_cond(l4, lambda s: len(s) < 4)
>>> l4    # doctesttag: +TAG=2_modifica_cond
['ara', 'vindra', 'aquell', 'temps', 'ara', 'calor', 'ara', 'fruita', 'bona']
>>> l5 = 'ara vindra aquell temps de calor i fruita madura'.split()
>>> modifica_cond(l5, lambda s: s.count('a')>1)
>>> l5    # doctesttag: +TAG=2_modifica_cond
['ara', 'vindra', 'aquell', 'temps', 'de', 'calor', 'i', 'fruita', 'ara']
>>> l6 = list(range(101))
>>> modifica_cond(l6, lambda x: '1' in str(x))
>>> l6    # doctesttag: +TAG=2_modifica_cond
[0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 42, 43, 44, 45, 46, 47, 48, 49, 50, 0, 52, 53, 54, 55, 56, 57, 58, 59, 60, 0, 62, 63, 64, 65, 66, 67, 68, 69, 70, 0, 72, 73, 74, 75, 76, 77, 78, 79, 80, 0, 82, 83, 84, 85, 86, 87, 88, 89, 90, 0, 92, 93, 94, 95, 96, 97, 98, 99, 0]
>>> l7 = list(range(300))
>>> modifica_cond(l7, lambda x : x>1000 == 0)
>>> l7 == list(range(300))    # doctesttag: +TAG=2_modifica_cond
True

TESTS PANDAS

>>> import pandas as pd
>>> from naufragi import preu_max
>>> df = pd.read_csv('cincinnati.csv').set_index('PassengerId')
>>> preu_max(df, 1)    # doctesttag: +TAG=3_preu_max
('Fortune, Mr. Mark', 1106.0)
>>> preu_max(df, 2)    # doctesttag: +TAG=3_preu_max
('Hood, Mr. Ambrose Jr', 919.5)
>>> preu_max(df, 3)    # doctesttag: +TAG=3_preu_max
('Davies, Mr. Alfred J', 914.15)
>>> preu_max(df.iloc[500:700:2], 1)    # doctesttag: +TAG=3_preu_max
('Stead, Mr. William Thomas', 887.55)
>>> preu_max(df.iloc[300:500], 2)    # doctesttag: +TAG=3_preu_max
('Padro y Manent, Mr. Julian', 897.8625)
>>> preu_max(df.iloc[602::5], 3)    # doctesttag: +TAG=3_preu_max
('Smiljanic, Mr. Mile', 893.6625)
>>> preu_max(df.iloc[500:], 1)    # doctesttag: +TAG=3_preu_max
('Allison, Master. Hudson Trevor', 958.55)
>>> preu_max(df.iloc[600::3], 2)    # doctesttag: +TAG=3_preu_max
('Coleridge, Mr. Reginald Charles', 850.5)
>>> preu_max(df.iloc[500:], 3)    # doctesttag: +TAG=3_preu_max
('Petranec, Miss. Matilda', 895.8958)
>>> preu_max(df.iloc[::2], 3)    # doctesttag: +TAG=3_preu_max
('Meanwell, Miss. (Marion Ogden)', 897.05)
>>> from naufragi import supervivencia
>>> df = pd.read_csv('cincinnati.csv').set_index('PassengerId')
>>> supervivencia(df, 'female', 1, 20, 50)    # doctesttag: +TAG=3_supervivencia
(59, 18, 41)
>>> supervivencia(df, 'female', 3, -1, 0)    # doctesttag: +TAG=3_supervivencia
(74, 55, 19)
>>> supervivencia(df.iloc[::2], 'male', 1, 0, 100)    # doctesttag: +TAG=3_supervivencia
(41, 18, 23)
>>> supervivencia(df, 'male', 2, 0, 100)    # doctesttag: +TAG=3_supervivencia
(79, 40, 39)
>>> supervivencia(df, 'male', 3, 0, 100)    # doctesttag: +TAG=3_supervivencia
(159, 120, 39)
>>> supervivencia(df, 'male', 1, -1, 100)    # doctesttag: +TAG=3_supervivencia
(13, 5, 8)
>>> supervivencia(df, 'male', 2, -20, 50)    # doctesttag: +TAG=3_supervivencia
(4, 3, 1)
>>> supervivencia(df, 'female', 2, 50, 80)    # doctesttag: +TAG=3_supervivencia
(8, 6, 2)
>>> supervivencia(df, 'female', 3, 50, 100)    # doctesttag: +TAG=3_supervivencia
(5, 4, 1)
>>> supervivencia(df, 'male', 3, 1, 15)    # doctesttag: +TAG=3_supervivencia
(24, 16, 8)