Solució del lliurament 1 G30 d’Ampliació d’Informàtica¶
- Organització:
Secció ETSEIB, Departament de Ciències de la Computació, UPC
- Data:
2 d’octubre de 2024
- Durada:
30 minuts
- Copyright:
Reconeixement-CompartirIgual 3.0 No adaptada de Creative Commons
Jocs de proves
>>> from itertools import islice
Test nombres Catalan
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG=1_catalan
>>> from catalan import catalan
>>> it = catalan(13)
>>> for i in range(13): # doctesttag: +TAG=1_catalan
... print(i, ' - ', next(it))
...
0 - 1
1 - 1
2 - 2
3 - 5
4 - 14
5 - 42
6 - 132
7 - 429
8 - 1430
9 - 4862
10 - 16796
11 - 58786
12 - 208012
>>> for c in catalan(16): # doctesttag: +TAG=1_catalan
... print(c, end='-')
1-1-2-5-14-42-132-429-1430-4862-16796-58786-208012-742900-2674440-9694845-
>>> for i, c in islice(enumerate(catalan(21)), 17, 20) : # doctesttag: +TAG=1_catalan
... print('{} -- {}'.format(i,c))
17 -- 129644790
18 -- 477638700
19 -- 1767263190
>>> it = map(int, catalan(16))
>>> for i in range(16): # doctesttag: +TAG=1_catalan
... print(i, ' - ', next(it))
...
0 - 1
1 - 1
2 - 2
3 - 5
4 - 14
5 - 42
6 - 132
7 - 429
8 - 1430
9 - 4862
10 - 16796
11 - 58786
12 - 208012
13 - 742900
14 - 2674440
15 - 9694845
>>> for c in map(int, catalan(12)): # doctesttag: +TAG=1_catalan
... print(c, end='-')
1-1-2-5-14-42-132-429-1430-4862-16796-58786-
>>> for i, c in islice(enumerate(map(int, catalan(21))), 18, 21) : # doctesttag: +TAG=1_catalan
... print('{} -- {}'.format(i,c))
18 -- 477638700
19 -- 1767263190
20 -- 6564120420
Test dies
Els exemples que compten per la nota són només els que van seguits de
# doctesttag: +TAG=2_dies
>>> from dies import dies_setmana
>>> ndies= ['dilluns','dimarts','dimecres','dijous','divendres',
... 'dissabte','diumenge']
>>> dies = [28, 29, 30, 1, 2]
>>> it = dies_setmana(ndies, 4, dies)
>>> next(it) # doctesttag: +TAG=2_dies
('divendres', 28)
>>> next(it) # doctesttag: +TAG=2_dies
('dissabte', 29)
>>> next(it) # doctesttag: +TAG=2_dies
('diumenge', 30)
>>> next(it) # doctesttag: +TAG=2_dies
('dilluns', 1)
>>> next(it) # doctesttag: +TAG=2_dies
('dimarts', 2)
>>> next(it,'final')
'final'
>>> import itertools
>>> dies = itertools.chain(range(3, 32), range(1, 26))
>>> it = dies_setmana(ndies, 4, dies)
>>> next(it)
('divendres', 3)
>>> next(it)
('dissabte', 4)
>>> next(it)
('diumenge', 5)
>>> next(it)
('dilluns', 6)
>>> it2 = itertools.islice(it, 22, 28)
>>> for d in it2: # doctesttag: +TAG=2_dies
... print(d, end='-')
('dimecres', 29)-('dijous', 30)-('divendres', 31)-('dissabte', 1)-('diumenge', 2)-('dilluns', 3)-
>>> for d in itertools.islice(it, 20, None): # doctesttag: +TAG=2_dies
... print(d, end='-')
('dilluns', 24)-('dimarts', 25)-
Fem un calendari a partir de l’iterador.
>>> from functools import reduce
>>> import operator
>>> n_set = {'dilluns': 0,'dimarts': 1,'dimecres': 2,'dijous': 3,
... 'divendres': 4,'dissabte':5 ,'diumenge': 6}
>>> def calendari(it):
... def str_dia(dia):
... dset, dmes = dia
... return '{:2d} '.format(dmes) + ('\n' if dset == 'diumenge' else '')
... s = 'dl dt dc dj dv ds dd \n'
... dia = next(it)
... s += ' ' * n_set[dia[0]] + str_dia(dia)
... s += reduce(operator.add, map(str_dia, it))
... return s
>>>
>>> dies = itertools.chain(range(1, 32), range(1, 31))
>>> it = dies_setmana(ndies, 3, dies)
>>> print(calendari(it)) # doctesttag: +TAG=2_dies
dl dt dc dj dv ds dd
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30