Solució de l’examen final d’Informàtica. Torn 2

Organització:

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

Data:

11 de gener de 2019

Copyright:

Reconeixement-CompartirIgual 3.0 No adaptada de Creative Commons

Durada:

1 hora i 20 minuts

Jocs de proves

En la correcció s’han usat els fitxers polinomis.py i samarretes.csv.

Test exercici 1 : multiplicar monomis

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

>>> from monomi import PolinomiM
>>> p = PolinomiM()
>>> p[3], p[1], p[0] = 1, 2, 3
>>> print(p)
x^3+2x+3
>>> p2 = p.multmon(1)
>>> str(p2)=='x^4+2x^2+3x' # doctesttag: +TAG=1_multmon1
True
>>> p2[0] = 4
>>> print(p2)
x^4+2x^2+3x+4
>>> p3 = p2.multmon(4)
>>> str(p3)=='x^8+2x^6+3x^5+4x^4' and str(p2)=='x^4+2x^2+3x+4' \
...           and isinstance(p3, PolinomiM)  # doctesttag: +TAG=1_multmon
True
>>> p = PolinomiM()
>>> p[10], p[8], p[2] = 6, 7, 9
>>> print(p)
6x^10+7x^8+9x^2
>>> p2 = p.multmon(100)
>>> str(p2)=='6x^110+7x^108+9x^102' and str(p)=='6x^10+7x^8+9x^2' and \
...           isinstance(p2, PolinomiM)      # doctesttag: +TAG=1_multmon
True
>>> p = PolinomiM()
>>> p[10], p[8], p[2] = 6, 7, 9
>>> print(p)
6x^10+7x^8+9x^2
>>> p4 = p.multmon(0)
>>> str(p4)=='6x^10+7x^8+9x^2' and str(p)=='6x^10+7x^8+9x^2' \
...          and isinstance(p4, PolinomiM)  # doctesttag: +TAG=1_multmon
True
>>> q = PolinomiM()
>>> for i in range(5):  # doctesttag: +TAG=1_multmon
...    q[0] = i + 1
...    q = q.multmon(i)
...    print(q)
1
2x
2x^3+3x^2
2x^6+3x^5+4x^3
2x^10+3x^9+4x^7+5x^4
>>> p = PolinomiM()
>>> p[10000], p[1000] = 5, 2
>>> print(p)
5x^10000+2x^1000
>>> p2 = p.multmon(3)
>>> str(p2)=='5x^10003+2x^1003' and str(p)=='5x^10000+2x^1000' and \
...           isinstance(p2, PolinomiM)      # doctesttag: +TAG=1_multmon
True

Test exercici 2 :iterador inserció

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

>>> from insercio import insereix
>>> it1 = iter([1, 2, 3, 5, 6, 7, 8, 9, 10])
>>> it2 = insereix(it1, 3, 4)
>>> for elem in it2:             # doctesttag: +TAG=2_insercio
...     print(elem, end=',')
1,2,3,4,5,6,7,8,9,10,
>>> it1 = iter([-4, -3, -2, -1, 0, 1, 3])
>>> list(insereix(it1, 6, 2))    # doctesttag: +TAG=2_insercio
[-4, -3, -2, -1, 0, 1, 2, 3]
>>> list(insereix(it1, 8, 4))    # doctesttag: +TAG=2_insercio
[]
>>> it1 = iter([5, 6, 2, 8, 13, 2, 4, 11, 1])
>>> list(insereix(it1, 0, 20))   # doctesttag: +TAG=2_insercio
[20, 5, 6, 2, 8, 13, 2, 4, 11, 1]
>>> it1 = iter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
>>> list(insereix(it1, 10, 11))  # doctesttag: +TAG=2_insercio
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

Funció npolitges [1.25 punts]

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

>>> import networkx as nx
>>> from engranatges import npolitges
>>> g = nx.Graph()
>>> g.add_edges_from([('A', 'C'), ('E', 'F'), ('J', 'K'),
...                   ('D', 'I'), ('I', 'H'), ('H', 'G')], unio='DENT')
>>> g.add_edges_from([('B', 'C'), ('C', 'D'), ('F', 'I'), ('K', 'L')], unio='POL')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
4
>>> g.add_edge('A', 'J', unio='POL')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
5
>>> g.remove_edge('C', 'D')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
4
>>> nx.add_path(g,['M','N','R'], unio='POL')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
6
>>> g = nx.Graph()
>>> nx.add_path(g,[1, 2, 3, 4], unio='DENT')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
0
>>> nx.add_path(g,[1, 5, 6], unio='POL')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
2
>>> nx.add_path(g,[5, 7, 8], unio='DENT')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
2
>>> nx.add_path(g,[3, 9, 10, 11], unio='POL')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
5
>>> g = nx.Graph()
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
0
>>> nx.add_path(g,[1, 2], unio='POL')
>>> npolitges(g) # doctesttag: +TAG=3_grafs-1_npolitges
1

Funció moviment [1.25 punts]

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

>>> import networkx as nx
>>> from engranatges import moviment
>>> g = nx.Graph()
>>> g.add_edges_from([('A', 'C'), ('E', 'F'), ('J', 'K'),
...                   ('D', 'I'), ('I', 'H'), ('H', 'G')], unio='DENT')
>>> g.add_edges_from([('B', 'C'), ('C', 'D'), ('F', 'I'), ('K', 'L'), ('G', 'X')], unio='POL')
>>> moviment(g, 'B') == {'C', 'F', 'H', 'E', 'G', 'I', 'D', 'A', 'X'} # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 'J') == {'K', 'L'} # doctesttag: +TAG=3_grafs-2_moviment
True
>>> g.add_node('N')
>>> moviment(g, 'N') == set() # doctesttag: +TAG=3_grafs-2_moviment
True
>>> g.add_edge('N', 'J', unio='POL')
>>> moviment(g, 'K') == {'J', 'N', 'L'} # doctesttag: +TAG=3_grafs-2_moviment
True
>>> g = nx.Graph()
>>> nx.add_path(g,[1, 2, 3, 4], unio='DENT')
>>> nx.add_path(g,[2, 5, 6], unio='DENT')
>>> nx.add_path(g,[5, 7, 8], unio='DENT')
>>> nx.add_path(g,[3, 9, 10, 11], unio='DENT')
>>> nx.add_path(g,[10, 12], unio='DENT')
>>> nx.add_path(g,[20, 21, 22], unio='POL')
>>> nx.add_path(g,[20, 23], unio='POL')
>>> nx.add_path(g,[31, 32, 33], unio='DENT')
>>> nx.add_path(g,[32, 34, 35], unio='POL')
>>> nx.add_path(g,[34, 36, 37], unio='DENT')
>>> g.add_node(40)
>>> s = set(range(1, 13))
>>> moviment(g, 1) == (s - {1}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 5) == (s - {5}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 10) == (s -{10}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> s = set(range(20, 24))
>>> moviment(g, 20) == (s -{20}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 23) == (s -{23}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 21) == (s -{21}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> s = set(range(31, 38))
>>> moviment(g, 31) == (s -{31}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 37) == (s -{37}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 32) == (s -{32}) # doctesttag: +TAG=3_grafs-2_moviment
True
>>> moviment(g, 40) # doctesttag: +TAG=3_grafs-2_moviment
set()

Test de recursivitat: index_repe

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

>>> from compactacio import index_repe
>>> index_repe('hola') # doctesttag: +TAG=4_recursivitat-1_index_repe
-1
>>> index_repe('holaa') # doctesttag: +TAG=4_recursivitat-1_index_repe
4
>>> index_repe('holla') # doctesttag: +TAG=4_recursivitat-1_index_repe
3
>>> index_repe('hoola') # doctesttag: +TAG=4_recursivitat-1_index_repe
2
>>> index_repe('hhola') # doctesttag: +TAG=4_recursivitat-1_index_repe
1
>>> index_repe('hhoollaa') # doctesttag: +TAG=4_recursivitat-1_index_repe
7
>>> index_repe('hhoollaaaaaa') # doctesttag: +TAG=4_recursivitat-1_index_repe
11
>>> index_repe('hhoollaaaaaaa') # doctesttag: +TAG=4_recursivitat-1_index_repe
12
>>> index_repe('hhoolla') # doctesttag: +TAG=4_recursivitat-1_index_repe
5
>>> index_repe('hh') # doctesttag: +TAG=4_recursivitat-1_index_repe
1
>>> index_repe('hhh') # doctesttag: +TAG=4_recursivitat-1_index_repe
2
>>> index_repe('') # doctesttag: +TAG=4_recursivitat-1_index_repe
-1
>>> index_repe('hhhhhhooooollla') # doctesttag: +TAG=4_recursivitat-1_index_repe
13

Test de recursivitat: compacta

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

>>> from compactacio import compacta
>>> compacta('hola') # doctesttag: +TAG=4_recursivitat-2_compacta
'hola'
>>> compacta('holaa') # doctesttag: +TAG=4_recursivitat-2_compacta
'hola'
>>> compacta('holla') # doctesttag: +TAG=4_recursivitat-2_compacta
'hola'
>>> compacta('hoolah') # doctesttag: +TAG=4_recursivitat-2_compacta
'holah'
>>> compacta('hholahhh') # doctesttag: +TAG=4_recursivitat-2_compacta
'holah'
>>> compacta('hhoollaa') # doctesttag: +TAG=4_recursivitat-2_compacta
'hola'
>>> compacta('hhoollaaaaaa') # doctesttag: +TAG=4_recursivitat-2_compacta
'hola'
>>> compacta('hhoohhoollaaaaaaa') # doctesttag: +TAG=4_recursivitat-2_compacta
'hohola'
>>> compacta('hhoolla') # doctesttag: +TAG=4_recursivitat-2_compacta
'hola'
>>> compacta('hh') # doctesttag: +TAG=4_recursivitat-2_compacta
'h'
>>> compacta('hhh') # doctesttag: +TAG=4_recursivitat-2_compacta
'h'
>>> compacta('') # doctesttag: +TAG=4_recursivitat-2_compacta
''
>>> compacta('hooooolllahola') # doctesttag: +TAG=4_recursivitat-2_compacta
'holahola'
>>> compacta('bon dia i bona nit') # doctesttag: +TAG=4_recursivitat-2_compacta
'bon dia i bona nit'
>>> compacta('bon     dia') # doctesttag: +TAG=4_recursivitat-2_compacta
'bon dia'
>>> compacta('Bonaa   niiit!!!') # doctesttag: +TAG=4_recursivitat-2_compacta
'Bona nit!'

Test de vendes_genere_comarca

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

>>> import pandas as pd
>>> df = pd.read_csv('samarretes.csv')
>>> from samarretes import vendes_genere_comarca
>>> vendes_genere_comarca(df, 'Urgell', 'home') # doctesttag: +TAG=5_pandas-1_samarretes
13
>>> vendes_genere_comarca(df, 'Terra Alta', 'dona') # doctesttag: +TAG=5_pandas-1_samarretes
8
>>> vendes_genere_comarca(df, 'Terra Alta', 'home') # doctesttag: +TAG=5_pandas-1_samarretes
21
>>> vendes_genere_comarca(df, 'Terra Alta', 'home') # doctesttag: +TAG=5_pandas-1_samarretes
21
>>> vendes_genere_comarca(df[100:120], 'Terra Alta', 'dona') # doctesttag: +TAG=5_pandas-1_samarretes
0
>>> vendes_genere_comarca(df, 'Priorat', 'home') # doctesttag: +TAG=5_pandas-1_samarretes
15
>>> vendes_genere_comarca(df, 'Anoia', 'dona') # doctesttag: +TAG=5_pandas-1_samarretes
9
>>> vendes_genere_comarca(df, "Ribera d'Ebre", 'home') # doctesttag: +TAG=5_pandas-1_samarretes
16
>>> vendes_genere_comarca(df, "Ribera d'Ebre", 'dona') # doctesttag: +TAG=5_pandas-1_samarretes
8

Test de import_vendes

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

>>> import pandas as pd
>>> df = pd.read_csv('samarretes.csv')
>>> from samarretes import import_vendes
>>> print(round(import_vendes(df, 'XL'), 2)) # doctesttag: +TAG=5_pandas-2_import_vendes
53377.9
>>> print(int(import_vendes(df, 'XXL'))) # doctesttag: +TAG=5_pandas-2_import_vendes
18503
>>> print(round(import_vendes(df[:100], 'XXL'), 2)) # doctesttag: +TAG=5_pandas-2_import_vendes
2443.5
>>> print(round(import_vendes(df[100:], 'XXL'), 2)) # doctesttag: +TAG=5_pandas-2_import_vendes
16060.1
>>> print(round(import_vendes(df[200:], 'S'), 2)) # doctesttag: +TAG=5_pandas-2_import_vendes
15270.2
>>> print(int(import_vendes(df[0:1], 'S'))) # doctesttag: +TAG=5_pandas-2_import_vendes
0
>>> print(round(import_vendes(df[0:1], 'XS'), 2)) # doctesttag: +TAG=5_pandas-2_import_vendes
53.6
>>> print(int(import_vendes(df[1:2], 'S'))) # doctesttag: +TAG=5_pandas-2_import_vendes
238