2. Contrasenyes combinades (5 punts)¶
Avís
Per resoldre aquest exercici no es poden fer servir iteracions (ni for ni while ), només les funcions predefinides de Python i les dels mòduls itertools, functools i operator. Tampoc es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per desar tots els elements dels iteradors.
Disposem de dues sèries:
una sèrie N de noms (persones, animals, objectes, etc.),
una sèrie D de dates en format
dd/mm/yyyy.
A partir d’aquestes sèries volem generar les contrasenyes que resulten de totes les possibles combinacions entre cada nom de N i l’any (yyyy) de D. Cada contrasenya ha de tenir el format <nom>-<any>, on <nom> és el nom convertit a minúscules i <any> són els darrers quatre dígits de la data.
Les contrasenyes s’han de generar en l’ordre que resulta de recórrer primer la sèrie de noms i, per a cada nom, recórrer tota la sèrie de dates. A més, només s’accepten les contrasenyes que tinguin una longitud igual o superior a 8 caràcters.
Dissenya la funció següent i desa-la al mòdul contrasenyes
(fitxer contrasenyes.py):
- contrasenyes.genera(noms, dates)¶
- Paràmetres:
noms – iterador sobre una sèrie no buida N de noms
dates – iterador sobre una sèrie no buida D de dates en format
dd/mm/yyyy
- Retorna:
iterador sobre totes les contrasenyes acceptades, en l’ordre indicat
Per exemple,
>>> noms = iter(['Anna', 'pi', 'GAT', 'groc'])
>>> dates = iter(['01/01/2020', '15/03/2022'])
>>> for x in genera(noms, dates):
... print(x, end=',')
anna-2020,anna-2022,gat-2020,gat-2022,groc-2020,groc-2022,
Disposes d’un joc de proves més complet al fitxer tests-contrasenyes.txt.