3. Construccions amb retard (3 punts)

Disposem d’un fitxer de text amb dades de les construccions d’una certa empresa durant un cert període. Les construccions poden estar acabades, en curs o pendents d’iniciar-se. Aquesta informació es guarda en un fitxer. Cada línia del fitxer conté les següents dades d’una construcció: un identificador de l’obra (un string), estat (en format string que pot prendre els valors: 'ACABADA', 'EN CURS' o 'NO INICIADA'), el pressupost (un enter corresponent al valor en euros), la durada prevista (un enter en mesos) i el mes de la data prevista de finalització (MM/AA). Aquestes dades estan separades pel caràcter ';' tal com mostra l’exemple:

xy_98967;NO INICIADA;23000;12;04/24
WT_87563;EN CURS;12500;3;08/23
ATRP_785;NO INICIADA;245000;23;08/24
xyT_12967;ACABADA;20000;6;04/23
WTMN_563;EN CURS;12500;3;02/24
LLRTP_85;NO INICIADA;245000;23;08/24
BAxy_98967;NO INICIADA;600000;20;12/24
WEST_87563;EN CURS;12500;3;08/23
RAZTP_785;NO INICIADA;245000;23;08/24
ALMxy_98967;NO INICIADA;23000;10;12/23
CAWT_87563;ACABADA;5500;5;12/23
TDRTP_785;NO INICIADA;245000;33;08/26

Pots baixar-te aquest fitxer per fer proves construcSA.txt.

Dissenya la següent funció i desa-la al mòdul construccio (fitxer construccio.py):

contruccio.retards(nom_fitxer, data_actual)

Donats un string nom_fitxer amb el nom d’un fitxer amb les construccions d’una certa empresa i donat un string, data_actual, que representa una data formada només pel mes i l’any (MM/AA), retorna una llista amb dades de les obres no iniciades tals que el nombre de mesos que queden fins a la data de finalització prevista és menor o igual que la durada prevista.

Les dades de la llista resultant seran tuples de tres elements: identificador de l’obra, mesos que falten per la data prevista de finalització i mesos previstos de durada de l’obra.

L’ordre de la llista resultant serà el mateix que hi ha en el fitxer.

Per exemple, si un fitxer anomenat construcSA.txt conté les línies de l’exemple anterior, el resultat serà que es mostra a continuació:


>>> r = retards('construcSA.txt', '05/23')
>>> r
[('xy_98967', 11, 12), ('ATRP_785', 15, 23), ('LLRTP_85', 15, 23), ('BAxy_98967', 19, 20), ('RAZTP_785', 15, 23), ('ALMxy_98967', 7, 10)]

>>> r = retards('construcSA.txt', '10/23')
>>> r
[('xy_98967', 6, 12), ('ATRP_785', 10, 23), ('LLRTP_85', 10, 23), ('BAxy_98967', 14, 20), ('RAZTP_785', 10, 23), ('ALMxy_98967', 2, 10)]

>>> r = retards('construcSA.txt', '01/24')
>>> r
[('xy_98967', 3, 12), ('ATRP_785', 7, 23), ('LLRTP_85', 7, 23), ('BAxy_98967', 11, 20), ('RAZTP_785', 7, 23), ('ALMxy_98967', -1, 10), ('TDRTP_785', 31, 33)]

>>> r = retards('construcSA.txt', '01/23')
>>> r
[('ATRP_785', 19, 23), ('LLRTP_85', 19, 23), ('RAZTP_785', 19, 23)]

Disposes d’aquests i d’altres jocs de proves al fitxer test-construccio.txt.

Nota

  • Les dades que hi ha al fitxer no segueix cap mena d’ordre.

  • Es recomanable fer una funció que calculi els mesos que falten entre dues dates donades del tipus MM/AA.

  • Suposarem que mai la data d’entrega prevista sigui anterior a la data actual.