Biorąc pod uwagę trzy nieujemne liczby całkowite y, moraz d(z których co najmniej jeden musi być dodatnia) i poprawną datę z pozytywnym roku (w dowolnym odpowiednim formacie, który obejmuje rok, miesiąc i dzień, a nie informacje dodatkowe), wyjście z data, to jest ylata, mmiesiące i ddni po pierwotnej dacie.
Kalendarza gregoriańskiego należy używać dla wszystkich dat (nawet dat poprzedzających przyjęcie kalendarza gregoriańskiego).
Metoda obliczania następnej daty jest następująca:
- Dodaj
ydo roku - Dodaj
mdo miesiąca - Normalizuj datę, stosując najazdy (np.
2018-13-01->2019-01-01) - Jeśli dzień minął ostatni dzień miesiąca, zmień go na ostatni dzień miesiąca (np.
2018-02-30->2018-02-28) - Dodaj
ddo dnia - Normalizuj datę, stosując najazdy (np.
2019-01-32->2019-02-01)
Lata przestępne (lata podzielne przez 4, ale niepodzielne przez 100, chyba że podzielne przez 400) muszą być odpowiednio obsługiwane. Wszystkie wejścia i wyjścia będą w reprezentatywnym zakresie liczb całkowitych twojego języka.
Przypadki testowe
Przypadki testowe są dostarczane w formacie input => output, w którym inputznajduje się obiekt JSON.
{"date":"2018-01-01","add":{"d":1}} => 2018-01-02
{"date":"2018-01-01","add":{"M":1}} => 2018-02-01
{"date":"2018-01-01","add":{"Y":1}} => 2019-01-01
{"date":"2018-01-30","add":{"M":1}} => 2018-02-28
{"date":"2018-01-30","add":{"M":2}} => 2018-03-30
{"date":"2000-02-29","add":{"Y":1}} => 2001-02-28
{"date":"2000-02-29","add":{"Y":4}} => 2004-02-29
{"date":"2000-01-30","add":{"d":2}} => 2000-02-01
{"date":"2018-01-01","add":{"Y":2,"M":3,"d":4}} => 2020-04-05
{"date":"2018-01-01","add":{"Y":5,"M":15,"d":40}} => 2024-05-11
Możesz użyć tego JSFiddle do testowania.
To jest golf-golf, więc wygrywa najkrótsze rozwiązanie (w każdym języku).
y, ma d(np mogłyby dbyć 2147483000?)
All inputs and outputs will be within the representable integer range of your language.