Gegeben drei nicht negative ganze Zahlen y
, m
und d
(von denen mindestens einer muss positiv sein) und ein gültiges Datum mit einem positiven Jahr (in jedem vernünftigen Format , das das Jahr enthält, Monat und Tag, und keine weiteren Informationen), Ausgabe der Datum, das y
Jahre, m
Monate und d
Tage nach dem ursprünglichen Datum liegt.
Der Gregorianische Kalender ist für alle Daten zu verwenden (auch Daten vor der Annahme des Gregorianischen Kalenders).
Die Methode zur Berechnung des nächsten Datums lautet wie folgt:
y
Zum Jahr hinzufügen- In
m
dem Monat - Normalisieren Sie das Datum durch Anwenden von Rollovers (z. B.
2018-13-01
->2019-01-01
). - Wenn der Tag nach dem letzten Tag des Monats liegt, ändern Sie ihn auf den letzten Tag des Monats (z. B.
2018-02-30
->2018-02-28
). d
Zum Tag hinzufügen- Normalisieren Sie das Datum durch Anwenden von Rollovers (z. B.
2019-01-32
->2019-02-01
).
Schaltjahre (Jahre, die durch 4 teilbar sind, aber nicht durch 100 teilbar sind, es sei denn, sie sind auch durch 400 teilbar) müssen angemessen behandelt werden. Alle Ein- und Ausgänge liegen im darstellbaren Ganzzahlbereich Ihrer Sprache.
Testfälle
Die Testfälle werden in dem Format zur Verfügung gestellt input => output
, in dem input
ein JSON - Objekt ist.
{"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
Sie können diese JSFiddle zum Testen verwenden.
Dies ist Code-Golf , also gewinnt die kürzeste Lösung (in jeder Sprache).
y
, m
und d
(zB könnte d
2147483000 sein?)
All inputs and outputs will be within the representable integer range of your language.