Biorąc pod uwagę trzy nieujemne liczby całkowite y
, m
oraz 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 y
lata, m
miesiące i d
dni 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
y
do roku - Dodaj
m
do 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
d
do 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 input
znajduje 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
, m
a d
(np mogłyby d
być 2147483000?)
All inputs and outputs will be within the representable integer range of your language.