Solució del lliurament 1 G10 d’Ampliació d’Informàtica

Organització:

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

Data:

29 de setembre de 2025

Durada:

30 minuts

Copyright:

Reconeixement-CompartirIgual 3.0 No adaptada de Creative Commons

Jocs de proves

>>> from coefs_poli import coeficients_polinomi
>>> import itertools
>>> p = {       # Polinomi p(x) = -x^5 + 7x^2 - 3
...   0: -3,
...   2: 7,
...   5: -1
... }
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, 7)) # doctesttag: +TAG=1_coefs_poli
[(0, -3), (1, 0), (2, 7), (3, 0), (4, 0), (5, -1), (6, 0)]
>>> p = {       # Polinomi p(x) = -10x^4 - 5x^3 - 12x
...   1: 12,
...   3: -5,
...   4: -10
... }
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, 9)) # doctesttag: +TAG=1_coefs_poli
[(0, 0), (1, 12), (2, 0), (3, -5), (4, -10), (5, 0), (6, 0), (7, 0), (8, 0)]
>>> p = {3: -6, 4: 2, 5: -2, 16: 3, 9: 8, 19: -9}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, 0), (1, 0), (2, 0), (3, -6), (4, 2), (5, -2), (6, 0), (7, 0), (8, 0), (9, 8), (10, 0), (11, 0), (12, 0), (13, 0), (14, 0), (15, 0), (16, 3), (17, 0), (18, 0), (19, -9)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> p = {9: 5, 1: -2, 0: 4, 10: 8, 3: 6, 15: 1, 7: -6, 6: -9, 18: -2, 16: -2}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, 4), (1, -2), (2, 0), (3, 6), (4, 0), (5, 0), (6, -9), (7, -6), (8, 0), (9, 5), (10, 8), (11, 0), (12, 0), (13, 0), (14, 0), (15, 1), (16, -2), (17, 0), (18, -2)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> p = {18: -7, 10: 4, 16: 9, 5: 8, 15: -6, 6: 8, 2: -7, 0: -1, 4: 6, 12: -1, 9: 6, 13: 5, 14: 4, 3: -7, 19: -5}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, -1), (1, 0), (2, -7), (3, -7), (4, 6), (5, 8), (6, 8), (7, 0), (8, 0), (9, 6), (10, 4), (11, 0), (12, -1), (13, 5), (14, 4), (15, -6), (16, 9), (17, 0), (18, -7), (19, -5)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> p = {16: -5, 5: 3, 19: -8, 17: -9, 13: 0, 10: -2, 18: 1, 12: -5, 0: 6, 1: -5, 7: 0, 3: 0, 8: -3, 2: 8, 11: -5, 9: 7, 14: -3, 6: -3, 4: -4, 15: -1}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, 6), (1, -5), (2, 8), (3, 0), (4, -4), (5, 3), (6, -3), (7, 0), (8, -3), (9, 7), (10, -2), (11, -5), (12, -5), (13, 0), (14, -3), (15, -1), (16, -5), (17, -9), (18, 1), (19, -8)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> p = {5: 8, 7: 2, 15: -9, 13: -1, 16: -4, 10: -3, 4: 4}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 4), (5, 8), (6, 0), (7, 2), (8, 0), (9, 0), (10, -3), (11, 0), (12, 0), (13, -1), (14, 0), (15, -9), (16, -4)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> p = {11: -9, 8: -3, 16: -8, 7: -1, 14: 0, 0: -9, 3: 7, 17: -4, 9: 1, 18: -5, 5: -2, 15: -2, 4: 8}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, -9), (1, 0), (2, 0), (3, 7), (4, 8), (5, -2), (6, 0), (7, -1), (8, -3), (9, 1), (10, 0), (11, -9), (12, 0), (13, 0), (14, 0), (15, -2), (16, -8), (17, -4), (18, -5)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> p = {16: -5, 12: 5, 17: 2, 13: -9, 9: -7, 11: 2, 4: 7, 0: -8, 15: -7, 8: 3, 5: -7, 6: 1, 1: 7, 19: -4, 3: 6, 2: 6, 14: -6}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, -8), (1, 7), (2, 6), (3, 6), (4, 7), (5, -7), (6, 1), (7, 0), (8, 3), (9, -7), (10, 0), (11, 2), (12, 5), (13, -9), (14, -6), (15, -7), (16, -5), (17, 2), (18, 0), (19, -4)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> p = {0: 10, 12: -7, 8: 2, 13: 8}
>>> c = coeficients_polinomi(p)
>>> list(itertools.islice(c, max(p) + 1)) # doctesttag: +TAG=1_coefs_poli
[(0, 10), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0), (8, 2), (9, 0), (10, 0), (11, 0), (12, -7), (13, 8)]
>>> all(f == 0 for _, f in itertools.islice(c, 10))
True
>>> from aval_poli import avalua_polinomi
>>> import itertools

–ini-enunciat

>>> p = iter([(0, -3), (1, 0), (2, 7), (3, 0), (4, 0), (5, -1), (6, 0)])
>>> r = avalua_polinomi(p, 1)
>>> r is iter(r) # r és un iterador
True
>>> list(itertools.islice(r, 7)) # doctesttag: +TAG=2_aval_poli
[(0, -3), (1, -3), (2, 4), (3, 4), (4, 4), (5, 3), (6, 3)]
>>> p = iter([(0, 0), (1, 12), (2, 0), (3, -5), (4, -10), (5, 0), (6, 0), (7, 0), (8, 0)])
>>> r = avalua_polinomi(p, -1)
>>> list(itertools.islice(r, 9)) # doctesttag: +TAG=2_aval_poli
[(0, 0), (1, -12), (2, -12), (3, -7), (4, -17), (5, -17), (6, -17), (7, -17), (8, -17)]

–fi-enunciat

>>> def completa(p):
...     p1, p2 = itertools.tee(p)
...     gp = max(g for g, _ in p1)
...     return itertools.chain(p2, ((g, 0) for g in itertools.count(gp+1))), gp
>>> p = [(0, 0), (1, 0), (2, 0), (3, -6), (4, 2), (5, -2), (6, 0), (7, 0), (8, 0), (9, 8), (10, 0), (11, 0), (12, 0), (13, 0), (14, 0), (15, 0), (16, 3), (17, 0), (18, 0), (19, -9)]
>>> it_p, g = completa(p)
>>> r = avalua_polinomi(it_p, -1)
>>> list(itertools.islice(r, g + 1)) # doctesttag: +TAG=2_aval_poli
[(0, 0), (1, 0), (2, 0), (3, 6), (4, 8), (5, 10), (6, 10), (7, 10), (8, 10), (9, 2), (10, 2), (11, 2), (12, 2), (13, 2), (14, 2), (15, 2), (16, 5), (17, 5), (18, 5), (19, 14)]
>>> p = [(0, 4), (1, -2), (2, 0), (3, 6), (4, 0), (5, 0), (6, -9), (7, -6), (8, 0), (9, 5), (10, 8), (11, 0), (12, 0), (13, 0), (14, 0), (15, 1), (16, -2), (17, 0), (18, -2)]
>>> it_p, gp = completa(p)
>>> r = avalua_polinomi(it_p, -1)
>>> list(itertools.islice(r, gp + 1)) # doctesttag: +TAG=2_aval_poli
[(0, 4), (1, 6), (2, 6), (3, 0), (4, 0), (5, 0), (6, -9), (7, -3), (8, -3), (9, -8), (10, 0), (11, 0), (12, 0), (13, 0), (14, 0), (15, -1), (16, -3), (17, -3), (18, -5)]
>>> p = [(0, -1), (1, 0), (2, -7), (3, -7), (4, 6), (5, 8), (6, 8), (7, 0), (8, 0), (9, 6), (10, 4), (11, 0), (12, -1), (13, 5), (14, 4), (15, -6), (16, 9), (17, 0), (18, -7), (19, -5)]
>>> it_p, gp = completa(p)
>>> r = avalua_polinomi(it_p, -1)
>>> list(itertools.islice(r, gp + 1)) # doctesttag: +TAG=2_aval_poli
[(0, -1), (1, -1), (2, -8), (3, -1), (4, 5), (5, -3), (6, 5), (7, 5), (8, 5), (9, -1), (10, 3), (11, 3), (12, 2), (13, -3), (14, 1), (15, 7), (16, 16), (17, 16), (18, 9), (19, 14)]
>>> p = [(0, 6), (1, -5), (2, 8), (3, 0), (4, -4), (5, 3), (6, -3), (7, 0), (8, -3), (9, 7), (10, -2), (11, -5), (12, -5), (13, 0), (14, -3), (15, -1), (16, -5), (17, -9), (18, 1), (19, -8)]
>>> it_p, gp = completa(p)
>>> r = avalua_polinomi(it_p, -1)
>>> list(itertools.islice(r, gp + 1)) # doctesttag: +TAG=2_aval_poli
[(0, 6), (1, 11), (2, 19), (3, 19), (4, 15), (5, 12), (6, 9), (7, 9), (8, 6), (9, -1), (10, -3), (11, 2), (12, -3), (13, -3), (14, -6), (15, -5), (16, -10), (17, -1), (18, 0), (19, 8)]
>>> p = [(0, 0), (1, 0), (2, 0), (3, 0), (4, 4), (5, 8), (6, 0), (7, 2), (8, 0), (9, 0), (10, -3), (11, 0), (12, 0), (13, -1), (14, 0), (15, -9), (16, -4)]
>>> it_p, gp = completa(p)
>>> r = avalua_polinomi(it_p, -1)
>>> list(itertools.islice(r, gp + 1)) # doctesttag: +TAG=2_aval_poli
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 4), (5, -4), (6, -4), (7, -6), (8, -6), (9, -6), (10, -9), (11, -9), (12, -9), (13, -8), (14, -8), (15, 1), (16, -3)]
>>> p = [(0, -9), (1, 0), (2, 0), (3, 7), (4, 8), (5, -2), (6, 0), (7, -1), (8, -3), (9, 1), (10, 0), (11, -9), (12, 0), (13, 0), (14, 0), (15, -2), (16, -8), (17, -4), (18, -5)]
>>> it_p, gp = completa(p)
>>> r = avalua_polinomi(it_p, -1)
>>> list(itertools.islice(r, gp + 1)) # doctesttag: +TAG=2_aval_poli
[(0, -9), (1, -9), (2, -9), (3, -16), (4, -8), (5, -6), (6, -6), (7, -5), (8, -8), (9, -9), (10, -9), (11, 0), (12, 0), (13, 0), (14, 0), (15, 2), (16, -6), (17, -2), (18, -7)]
>>> p = [(0, -8), (1, 7), (2, 6), (3, 6), (4, 7), (5, -7), (6, 1), (7, 0), (8, 3), (9, -7), (10, 0), (11, 2), (12, 5), (13, -9), (14, -6), (15, -7), (16, -5), (17, 2), (18, 0), (19, -4)]
>>> it_p, gp = completa(p)
>>> r = avalua_polinomi(it_p, -1)
>>> list(itertools.islice(r, gp + 1)) # doctesttag: +TAG=2_aval_poli
[(0, -8), (1, -15), (2, -9), (3, -15), (4, -8), (5, -1), (6, 0), (7, 0), (8, 3), (9, 10), (10, 10), (11, 8), (12, 13), (13, 22), (14, 16), (15, 23), (16, 18), (17, 16), (18, 16), (19, 20)]
>>> p = [(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0), (8, 2), (9, 0), (10, 0), (11, 0), (12, -7), (13, 8)]
>>> it_p, gp = completa(p)
>>> r = avalua_polinomi(it_p, -2)
>>> list(itertools.islice(r, gp + 1)) # doctesttag: +TAG=2_aval_poli
[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0), (6, 0), (7, 0), (8, 512), (9, 512), (10, 512), (11, 512), (12, -28160), (13, -93696)]