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 TrueTESTS 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)