0949 - Calendar 3
De la Universitas MediaWiki
Cerinta
Dându-se o dată calendaristică și un număr nr de zile, să se determine care este data aflată la o diferență de nr de zile.
Date de intrare
Programul citește de la tastatură 3 numere naturale Z, L și A, reprezentând ziua, luna si anul curent, iar pe al doilea rând numărul nr de zile.
Date de iesire
Programul va afișa pe ecran 3 numere naturale ZI, LUNA, AN reprezentând data cerută.
Restrictii si precizari
- -100.000 ⩽ nr ⩽ 100000
- Datele calendaristice din fișierul de intrare sunt între 1 ianuarie 1900 și 31 decembrie 2100
- Nu se vor fi date calendaristice invalide precum 29 februarie 2015 sau 31 noiembrie 1980
- Dacă nr este negativ, data cerută se afla înaintea cele curente.
Exemplul 1
- Intrare
- 6 1 2015
- 15
- Iesire
- Datele introduse corespund restrictiilor impuse
- 21 1 2015
Exemplul 2
- Intrare
- 29 2 2015
- 25
- Iesire
- Datele introduse nu corespund restrictiilor impuse
Rezolvare
def adauga_zile(Z, L, A, nr_zile):
# Functie pentru a adauga un numar de zile la o data calendaristica
zile_luna = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
while nr_zile > 0:
zile_luna[2] = 29 if (A % 4 == 0 and A % 100 != 0) or (A % 400 == 0) else 28
Z += 1
if Z > zile_luna[L]:
Z = 1
L += 1
if L > 12:
L = 1
A += 1
nr_zile -= 1
return Z, L, A
def verifica_restrictii(Z, L, A, nr_zile):
if (
1 <= Z <= 31
and 1 <= L <= 12
and 1900 <= A <= 2100
and -100000 <= nr_zile <= 100000
):
return True
else:
return False
# Citire date de intrare
Z, L, A = map(int, input().split())
nr_zile = int(input())
# Verificare restricții
if verifica_restrictii(Z, L, A, nr_zile):
# Rezolvare și afișare rezultat
zi_noua, luna_noua, an_nou = adauga_zile(Z, L, A, nr_zile)
print("Datele introduse corespund restrictiilor impuse")
print(f"{zi_noua} {luna_noua} {an_nou}")
else:
print("Date de intrare nevalide!")