อืมผู้ชายวันที่หมดอายุนี้ไม่ได้เขียนเดือนด้วยตัวอักษร! ฉันไม่สามารถบอกได้ว่ามันจะหมดอายุในวันที่ 10 มีนาคมหรือ 3 ตุลาคม ... รอไม่ไม่เป็นไรปีพูดว่า 2012 (ซอยอิฐ oops-of-oops อิฐของชีสลงในถังขยะอย่างมืออาชีพ)
งั้นลองสมมติว่าคุณยุ่งเกินกว่าจะลองหาเหตุผลว่า marinara ขวดนี้จะหมดอายุเมื่อไหร่ คุณแค่ต้องการรุ่น Cliff Notes: มีความเป็นไปได้ที่จะครบกำหนดแล้ว? ลองเขียนโค้ดกัน!
คุณรู้ว่าผู้ผลิตพิมพ์วันที่เป็นจำนวนเต็มสามเท่าของการสั่งซื้อในหนึ่งในสามรูปแบบ:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
และคุณรู้ว่าบางวันสามารถตีความได้เพียงหนึ่งหรือสองวิธีไม่ใช่ทั้งสาม: 55 ใน55-11-5
นั้นจะต้องเป็นปีซึ่งหมายความว่ากล่องเฉพาะของ Twinkies นี้หมดอายุในวันที่ 5 พฤศจิกายน 1955 บางครั้งในปีนี้จะมีตัวเลขสี่หลักและ ไม่ใช่สองซึ่งสามารถออกกฎบางตัวเลือก เมื่อเป็นตัวเลขสองหลัก 50..99 หมายถึง 1950..1999 และ 0..49 หมายถึง 2,000..2049
งานของคุณคือการเขียนโปรแกรมหรือฟังก์ชั่นที่ใช้อาร์เรย์ของจำนวนเต็มซึ่งเป็นวันที่ที่ถูกต้องในการตีความอย่างน้อยหนึ่งรายการข้างต้นและให้โอกาสร้อยละที่มันยังดี โอกาสร้อยละเป็นเพียงเปอร์เซ็นต์ของการตีความที่ถูกต้องของวันที่ที่อยู่ในหรือหลังวันที่ของวันนี้
อาเรย์ของจำนวนเต็มจะเป็น[Int]
ประเภทความยาวสามภาษาของคุณหากเป็นอาร์กิวเมนต์ของฟังก์ชันและกำหนดเป็นจำนวนเต็มขีดกลาง - ขีดกลางหรือคั่นด้วยช่องว่าง (คุณจะเลือก) ถ้าใช้เป็นอินพุตบน STDIN ไปยัง โปรแกรมเต็มรูปแบบ *
"วันที่วันนี้" อาจเป็นวันที่ที่แท้จริงของวันนี้ตามที่ได้รับผ่านฟังก์ชั่นวันที่หรือวันที่ที่กำหนดในอาร์กิวเมนต์พิเศษในการทำงานหรือพารามิเตอร์พิเศษใน STDIN มันอาจจะเป็นในยุค Unix วินาทีสามเดือนปีวันอื่นเข้ามาในหนึ่งในสามวิธีข้างต้นหรืออีกวิธีที่สะดวกมากขึ้น
มาดูตัวอย่างกัน! อินพุตวันที่หมดอายุจะอยู่ในรูปแบบที่คั่นด้วยเส้นประและถือว่าเป็นตัวอย่างด้านล่างว่าวันที่วันนี้คือ 5 กรกฎาคม 2549
14-12-14
- การตีความที่ถูกต้องทั้งสองนี้ (DMY และ YMD) เทียบเท่า 14 ธันวาคม 2014 ผลลัพธ์ที่ได้คือ100เพราะผลิตภัณฑ์นี้ยังดีอยู่8-2-2006
- ตัวเลขสุดท้ายคือปีแน่นอนเพราะมันมีตัวเลขสี่หลัก อาจเป็นได้ทั้งวันที่ 8 กุมภาพันธ์ (หมดอายุ) หรือวันที่ 2 สิงหาคม (ยังดี) การส่งออกเป็น506-7-5
- นี่อาจเป็นอะไรก็ได้! การตีความ "5 กรกฎาคม 2549" ยังคงดี (สำหรับหนึ่งวันเท่านั้น) แต่การตีความที่เหลือทั้งสองในปี 2005 และควรถูกโยนโดยเร็วที่สุด การส่งออกเป็น336-5-7
- ที่นี่การตีความสองในสามนั้นปลอดภัย คุณสามารถปัดเศษทศนิยมขึ้นหรือลงดังนั้นทั้ง66หรือ67ก็โอเค12-31-99
- โอเคสิ่งนี้ชัดเจนตั้งแต่ช่วงเปลี่ยนศตวรรษ (ปี 50 ถึง 99 คือ 19XX และ 31 อาจเป็นเดือนไม่ได้) ไขมันใหญ่0และคุณควรทำความสะอาดตู้เย็นของคุณบ่อยขึ้น
คุณสามารถสันนิษฐานได้อย่างปลอดภัยว่าอินพุตใด ๆ ที่ไม่ตรงตามมาตรฐานข้างต้นไม่ได้เป็นความลับของกฎเอาต์พุตด้านบน
ไม่มีการร้องขอจากเว็บหรือช่องโหว่มาตรฐาน อนุญาตให้ใช้การจัดการกับวันที่ นี่คือรหัสกอล์ฟ: โปรแกรมที่สั้นที่สุดอาจชนะ
* ถ้าคุณกำลังใช้ brainfuck หรือภาษาที่มีประเภทข้อมูลที่คล้ายคลึงกันคุณสามารถใช้ค่า ASCII ของอักขระสามตัวแรกในอินพุตเป็นจำนวนเต็มสำหรับวันที่ สิ่งนี้ไม่รวมตรรกะปีสี่หลักแน่นอน แต่ฉันคิดว่าเราจะประหลาดใจเกินไปโดยเห็นวิธีแก้ปัญหานี้ใน Brainfuck เพื่อทำให้คุณรู้สึกเล็กน้อย