รับสาม integers เชิงลบy
, m
และd
(ซึ่งอย่างน้อยหนึ่งต้องเป็นบวก) และวันที่ถูกต้องกับปีบวก (ในรูปแบบที่เหมาะสมใด ๆ ที่มีปีเดือนและวันที่และไม่มีข้อมูลเพิ่มเติม) เอาท์พุท วันที่คือy
ปีm
เดือนและd
วันหลังจากวันที่เดิม
ปฏิทิน Gregorian นั้นจะใช้สำหรับทุกวัน
วิธีการคำนวณวันที่ถัดไปมีดังนี้:
- เพิ่ม
y
ไปยังปี - เพิ่ม
m
ไปยังเดือน - ทำให้วันที่ปกติเป็นปกติโดยใช้ rollovers (เช่น
2018-13-01
->2019-01-01
) - หากวันนั้นผ่านวันสุดท้ายของเดือนให้เปลี่ยนเป็นวันสุดท้ายของเดือน (เช่น
2018-02-30
->2018-02-28
) - เพิ่ม
d
ไปยังวันที่ - ทำให้วันที่ปกติเป็นปกติโดยใช้ rollovers (เช่น
2019-01-32
->2019-02-01
)
Leap ปี (ปีหารด้วย 4 แต่ไม่หารด้วย 100 ยกเว้นหารด้วย 400) ต้องจัดการอย่างเหมาะสม อินพุตและเอาต์พุตทั้งหมดจะอยู่ในช่วงจำนวนเต็มที่เป็นตัวแทนของภาษาของคุณ
กรณีทดสอบ
กรณีทดสอบมีให้ในรูปแบบinput => output
โดยที่input
เป็นวัตถุ 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
คุณสามารถใช้JSFiddle นี้สำหรับการทดสอบ
นี่คือ รหัสกอล์ฟดังนั้นทางออกที่สั้นที่สุด (ในแต่ละภาษา) จะชนะ
y
, m
และd
(เช่นอาจd
จะเป็น 2147483000?)
All inputs and outputs will be within the representable integer range of your language.