噢,伙计,这个有效期不会用字母写月份!我不知道它是即将于3月10日或10月3日...等等,没有,没关系,今年说2012年(空中接力半使用的奶酪砖到垃圾桶可以像亲)
因此,让我们假设一下,您太忙了,无法尝试推断出这罐marinara应该何时过期。您只需要Cliff Notes版本:过期的可能性有多大?让我们写一些代码!
您知道制造商以以下三种格式之一将日期打印为整数的有序三元组:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
而且您知道某些日期只能用一种或两种方式来解释,而不能全部用三种方式来解释:55 55-11-5
年份必须是一年,这意味着Twinkies的特殊包装盒已于1955年11月5日到期。年份有时用四位数字表示,而不是两个,可以排除一些选择。如果是两位数,则50..99表示1950..1999,0..49表示2000..2049。
您的工作是编写一个程序或函数,该程序或函数采用一个整数数组,在上述至少一种解释中,该整数是一个有效日期,并输出百分比表示还好。机会百分数只是在今天或之后的日期的有效解释日期的百分比。
如果整数数组是函数[Int]
的参数,则它将是您语言的长度为3 的类型,并且如果用作STDIN上的输入,则以破折号,斜杠或以空格分隔(您可以选择)的整数形式给出完整程序。*
“今天的日期”可以是通过日期函数获得的今天的实际日期,也可以是STDIN中函数的额外参数或额外参数中给出的日期。可能以Unix纪元为单位,以上述三种方式之一输入另一个年月日三元组,或者以另一种更方便的方式输入。
让我们举一些例子!输入的到期日期将使用短划线分隔,并假设下面的示例今天的日期为2006年7月5日。
14-12-14
-对此的两种有效解释(DMY和YMD)都是等效的,2014年12月14日。输出为100,因为此产品绝对仍然不错。8-2-2006
-当然,最后一个数字是一年,因为它有四个数字。可能是2月8日(过期)或8月2日(仍然良好)。输出为50。6-7-5
-可能是任何东西!“ 2006年7月5日”的解释仍然很好(仅一天),但是其余两个都在2005年,应该尽快抛弃。输出为33。6-5-7
-在这里,三分之二的解释是安全的。您可以向上或向下舍入小数,因此66或67都可以。12-31-99
-好的,这是世纪之交的明确定义(从50到99的年份是19XX,而31不可能是一个月)。大脂肪0,您确实应该更频繁地清洁冰箱。
您可以放心地假设任何不符合上述标准的输入都不属于上述输出规则。
没有网络请求或标准漏洞。允许使用日期处理库。这就是代码高尔夫:可能会以最短的程序获胜。
* 如果使用的是Brainfuck或类似的数据类型残障语言,则可以假定输入中前三个字符的ASCII值是日期的整数。当然,这不包括四位数的年份逻辑,但是我认为在Brainfuck上看到针对此问题的解决方案以至于对您不满意,我们会感到惊讶。