อย่าบอกใครเลย แต่ฉันได้เปิดเครื่องการเดินทางข้ามเวลาของลุงของฉันแล้ว! ลุงของฉันหมกมุ่นอยู่กับตัวเลขสำคัญและนั่นแสดงให้เห็นในเครื่อง - เขาได้ตั้งโปรแกรมไว้เพื่อให้สามารถไปยังวันที่ที่รวมกันเป็นจำนวนเฉพาะเท่านั้น
มันไม่สามารถไปได้1947-08-15
เพราะ 1947 + 8 + 15 = 1970 ซึ่งไม่ใช่จำนวนเฉพาะ มันสามารถไปได้1947-07-25
เพราะ 1947 + 7 + 25 = 1979 ซึ่งสำคัญมาก ดังนั้นหากฉันต้องการกลับไปดูการเฉลิมฉลองเอกราชของอินเดียดูเหมือนว่าฉันจะต้องไปไม่กี่สัปดาห์ก่อนหน้านี้และรอ 20 วันเหล่านั้น
ฉันมีวันที่อื่นที่ฉันต้องการไปและฉันก็ต้องไปเดทก่อนเช่นกัน (หรือถ้าฉันโชคดีเท่ากับ) วันที่เป้าหมายของฉันซึ่งรวมกันเป็นจำนวนเฉพาะ แม้ว่าฉันใจร้อนและไม่ต้องการรอมากเกินไป - ดังนั้นฉันต้องการค้นหาวันที่ที่ฉันสามารถใช้ที่ใกล้เคียงที่สุดกับวันที่เป้าหมายของฉัน
คุณสามารถเขียนโปรแกรมที่ใช้วันที่เป้าหมายของฉันและให้วันที่ฉันควรป้อนลงในไทม์แมชชีน - วันที่ที่ใกล้ที่สุดก่อนหน้าหรือเท่ากับวันที่ที่กำหนดซึ่งส่วนต่าง ๆ รวมกันเป็นจำนวนเฉพาะ?
(สำหรับความท้าทายนี้เรากำลังใช้ปฏิทินเกรกอเรียนแบบproleptic - ซึ่งหมายความว่าเราใช้ปฏิทินเกรกอเรียนปัจจุบันแม้จะเป็นช่วงเวลาที่ผู้คนใช้ปฏิทินจูเลียนรุ่นเก่ากว่า)
อินพุต
- วันที่
- นึกคิดวันที่ใด ๆ ในยุคปัจจุบัน (AD); ในทางปฏิบัติชุดย่อยของภาษาของคุณสามารถจัดการได้อย่างเป็นธรรมชาติ
- ในรูปแบบที่มนุษย์อ่านได้เดียวที่คุณต้องการ
เอาท์พุต
- วันที่ที่ใกล้เคียงที่สุดกับวันที่ป้อนซึ่งน้อยกว่าหรือเท่ากับอินพุทและวันที่ + เดือน + ปีรวมกันเป็นจำนวนเฉพาะ
- ในรูปแบบที่มนุษย์อ่านได้เดียวที่คุณต้องการ
⁺: "มนุษย์สามารถอ่านได้" เช่นเดียวกับในวันเดือนและปีที่สะกดออกมาแยกกันตามลำดับ
กรณีทดสอบ
1947-08-15
=> 1947-07-25
1957-10-04
=> 1957-09-27
1776-07-04
=> 1776-07-04
999-12-12
=> 0999-12-10
2018-06-20
=> 2018-06-15
1999-01-02
=> 1998-12-29
1319-12-29
=> 1319-07-01
(ขอบคุณ @Shaggy, @PeterTaylor และ @Arnauld สำหรับความช่วยเหลือเกี่ยวกับคำถาม)
Fri Jul 25 02:46:39 CEST 1947
)