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.