À, anh bạn, ngày hết hạn này không viết tháng bằng chữ! Tôi không thể biết là nó sẽ hết hạn vào ngày 10 tháng 3 hay ngày 3 tháng 10 ... Đợi đã, không, đừng bận tâm, năm đó nói năm 2012. (con hẻm được sử dụng một nửa viên phô mai vào thùng rác như một người chuyên nghiệp)
Vì vậy, giả sử trong một khoảnh khắc mà bạn quá bận rộn để cố gắng giải thích khi nào lọ marinara này sẽ hết hạn. Bạn chỉ muốn phiên bản Cliff Notes: nó có khả năng đến hạn như thế nào? Hãy viết một số mã!
Bạn biết rằng các nhà sản xuất in ngày dưới dạng bộ ba số nguyên theo thứ tự, theo một trong ba định dạng:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
Và bạn biết rằng một số ngày chỉ có thể được diễn giải theo một hoặc hai cách, không phải cả ba: 55 trong 55-11-5
phải là một năm, có nghĩa là hộp Twinkies đặc biệt này đã hết hạn vào ngày 5 tháng 11 năm 1955. Năm đôi khi được đưa ra bằng bốn chữ số và không phải hai, có thể loại trừ một số tùy chọn. Tuy nhiên, khi đó là hai chữ số, 50..99 có nghĩa là 1950..1999 và 0..49 có nghĩa là 2000..2049.
Công việc của bạn là viết một chương trình hoặc hàm lấy một số nguyên là một ngày hợp lệ trong ít nhất một trong những cách hiểu ở trên, và đưa ra một tỷ lệ phần trăm cơ hội vẫn còn tốt. Cơ hội phần trăm chỉ đơn giản là tỷ lệ phần trăm của các diễn giải hợp lệ của ngày vào hoặc muộn hơn hơn ngày hôm nay.
Mảng số nguyên sẽ là ngôn ngữ của bạn [Int]
loại độ dài ba nếu nó là đối số của hàm và được cung cấp dưới dạng dấu gạch ngang, dấu gạch chéo hoặc dấu cách (bạn có thể chọn) nếu được sử dụng làm đầu vào trên STDIN cho chương trình đầy đủ. *
"Ngày hôm nay" có thể là ngày thực tế ngày hôm nay, như được lấy thông qua hàm ngày hoặc ngày được đưa ra trong một đối số bổ sung cho chức năng hoặc tham số bổ sung trong STDIN. Nó có thể là trong Unix epoch giây, một bộ ba ngày tháng khác được nhập theo một trong ba cách trên hoặc thời trang khác thuận tiện hơn.
Hãy có một số ví dụ! Đầu vào ngày hết hạn sẽ theo kiểu phân tách dấu gạch ngang và giả sử cho các ví dụ bên dưới ngày hôm nay là ngày 5 tháng 7 năm 2006.
14-12-14
- Cả hai cách hiểu hợp lệ cho điều này (DMY và YMD) đều tương đương, ngày 14 tháng 12 năm 2014. Sản lượng là 100 vì sản phẩm này chắc chắn vẫn còn tốt.8-2-2006
- Số cuối cùng là một năm, chắc chắn, vì nó có bốn chữ số. Điều này có thể là ngày 8 tháng 2 (hết hạn) hoặc ngày 2 tháng 8 (vẫn tốt). Đầu ra là 50 .6-7-5
- Đây có thể là bất cứ điều gì! Giải thích "ngày 5 tháng 7 năm 2006" vẫn tốt (chỉ trong một ngày), nhưng hai phiên bản còn lại đều vào năm 2005 và nên được ném càng nhanh càng tốt. Đầu ra là 33 .6-5-7
- Ở đây, hai trong số ba cách giải thích là an toàn. Bạn có thể làm tròn số thập phân của mình lên hoặc xuống, vì vậy 66 hoặc 67 đều ổn.12-31-99
- Được rồi, cái này rõ ràng từ đầu thế kỷ (năm từ 50 đến 99 là 19XX, và 31 không thể là một tháng). Một chất béo lớn 0 , và bạn thực sự nên dọn dẹp tủ lạnh của bạn thường xuyên hơn.
Bạn có thể giả định một cách an toàn rằng bất kỳ đầu vào nào không đáp ứng các tiêu chuẩn ở trên không thuộc về các quy tắc đầu ra ở trên.
Không có yêu cầu web hoặc sơ hở tiêu chuẩn. Thư viện xử lý ngày được cho phép. Đây là mã golf: có thể chương trình ngắn nhất sẽ giành chiến thắng.
* Nếu bạn đang sử dụng brainfuck hoặc một số ngôn ngữ bị lỗi kiểu dữ liệu tương tự, bạn có thể giả sử các giá trị ASCII của ba ký tự đầu tiên trong đầu vào là các số nguyên cho ngày. Điều này không bao gồm logic năm chữ số, chắc chắn, nhưng tôi nghĩ rằng chúng ta sẽ quá kinh ngạc khi thấy một giải pháp cho vấn đề này trong Brainfuck để xem nhẹ bạn về nó.