¡Vaya, hombre, esta fecha de vencimiento no escribe los meses con letras! No puedo decir si caducará el 10 de marzo o el 3 de octubre ... Espera, no, no importa, el año dice 2012. (callejón oops ladrillo de queso medio usado en el basurero como un profesional)
Entonces, supongamos por un momento que estás demasiado ocupado para tratar de razonar cuando se supone que este frasco de marinara caducará. Solo quiere la versión de Cliff Notes: ¿qué tan probable es que esté vencida? ¡Escribamos un código!
Usted sabe que los fabricantes imprimen la fecha como un triple ordenado de enteros, en uno de tres formatos:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
Y usted sabe que algunas fechas solo pueden interpretarse de una o dos maneras, no las tres: la 55 en 55-11-5
tiene que ser un año, lo que significa que esta caja particular de Twinkies expiró el 5 de noviembre de 1955. El año a veces se da en cuatro dígitos y no dos, lo que puede descartar algunas opciones. Sin embargo, cuando son dos dígitos, 50..99 significa 1950..1999 y 0..49 significa 2000..2049.
Su trabajo es escribir un programa o función que tome una matriz de enteros que sea una fecha válida en al menos una de las interpretaciones anteriores, y genere un porcentaje de probabilidad de que todavía sea buena. El porcentaje de probabilidad es simplemente el porcentaje de interpretaciones válidas de la fecha que son posteriores o posteriores a la fecha de hoy.
La matriz de enteros será el [Int]
tipo de longitud de su idioma tres si es un argumento para una función, y se dará como enteros con guiones, barras o espacios separados (puede elegir) si se usa como entrada en STDIN para un programa completo. *
La "fecha de hoy" puede ser la fecha real de hoy, tal como se obtiene a través de una función de fecha, o la fecha dada en un argumento adicional para la función o parámetro adicional en STDIN. Puede ser en segundos de época de Unix, otro triple año-mes-día ingresado en una de las tres formas anteriores, u otra forma más conveniente.
¡Tengamos algunos ejemplos! La entrada de la fecha de vencimiento estará en un estilo separado por guiones, y suponga para los ejemplos a continuación que la fecha de hoy es el 5 de julio de 2006.
14-12-14
- Ambas interpretaciones válidas para esto (DMY e YMD) son equivalentes, 14 de diciembre de 2014. El resultado es 100 porque este producto definitivamente sigue siendo bueno.8-2-2006
- El último número es un año, seguro, ya que tiene cuatro dígitos. Esto podría ser el 8 de febrero (caducado) o el 2 de agosto (aún bueno). La salida es 50 .6-7-5
- ¡Esto podría ser cualquier cosa! La interpretación del "5 de julio de 2006" sigue siendo buena (solo por un día), pero las dos restantes corresponden a 2005 y deben descartarse lo más rápido posible. La salida es 33 .6-5-7
- Aquí, dos de cada tres interpretaciones son seguras. Puede redondear su decimal hacia arriba o hacia abajo, por lo que 66 o 67 están bien.12-31-99
- Bien, este es inequívocamente desde el cambio de siglo (los años del 50 al 99 son 19XX, y el 31 no puede ser un mes). Un gran 0 gordo , y realmente deberías limpiar tu refrigerador con más frecuencia.
Puede asumir con seguridad que cualquier entrada que no cumpla con los estándares anteriores no está al tanto de las reglas de salida anteriores.
No hay solicitudes web ni lagunas estándar. Se permiten bibliotecas de manejo de fechas. Este es el código de golf: que gane el programa más corto.
* Si está utilizando brainfuck o algún lenguaje con discapacidad similar al tipo de datos, puede suponer que los valores ASCII de los primeros tres caracteres de entrada son los enteros de la fecha. Esto excluye la lógica del año de cuatro dígitos, claro, pero creo que estaríamos demasiado asombrados al ver una solución a esto en Brainfuck para desacreditarlo.