รับสาม 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.