Aww, cara, esse prazo de validade não escreve os meses com letras! Não sei dizer se está expirando em 10 de março ou 3 de outubro ... Espere, não, não importa, o ano diz 2012. (o beco-oops tijolo de queijo meio usado no lixo pode ser um profissional)
Então, vamos supor por um momento que você está muito ocupado para tentar pensar quando esse pote de marinara deve expirar. Você quer apenas a versão do Cliff Notes: qual a probabilidade de atraso? Vamos escrever um código!
Você sabe que os fabricantes imprimem a data como um triplo ordenado de números inteiros, em um dos três formatos:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
E você sabe que algumas datas só podem ser interpretadas de uma ou duas maneiras, e não as três: a 55 em 55-11-5
tem que ser um ano, significando que essa caixa específica de Twinkies expirou em 5 de novembro de 1955. Às vezes, o ano é dado em quatro dígitos e não dois, o que pode excluir algumas opções. Quando tem dois dígitos, 50..99 significa 1950..1999 e 0..49 significa 2000..2049.
Seu trabalho é escrever um programa ou função que utilize uma matriz de números inteiros que seja uma data válida em pelo menos uma das interpretações acima e dê uma chance percentual de que ainda seja bom. A chance percentual é simplesmente a porcentagem de interpretações válidas da data que estão na data posterior ou posterior à data de hoje.
A matriz de números inteiros será o [Int]
tipo de comprimento três da sua linguagem, se for um argumento para uma função, e fornecida como inteiros separados por traço, barra ou espaço (você escolhe), se usados como entrada em STDIN para um programa completo. *
"Data de hoje" pode ser a data real de hoje, obtida através de uma função de data, ou a data fornecida em um argumento extra para funcionar ou paramater extra no STDIN. Pode ser no Unix, época segundos, outro triplo ano-mês-dia inserido de uma das três maneiras acima, ou de outra maneira mais conveniente.
Vamos dar alguns exemplos! A entrada da data de validade será no estilo separado por traço e assuma os exemplos abaixo que a data de hoje é 5 de julho de 2006.
14-12-14
- Ambas as interpretações válidas para isso (DMY e YMD) são equivalentes, 14 de dezembro de 2014. A saída é 100 porque este produto ainda é definitivamente bom.8-2-2006
- O último número é um ano, com certeza, uma vez que possui quatro dígitos. Pode ser 8 de fevereiro (expirado) ou 2 de agosto (ainda válido). A saída é 50 .6-7-5
- Isso pode ser qualquer coisa! A interpretação "5 de julho de 2006" ainda é boa (apenas por um dia), mas os dois restantes são ambos em 2005 e devem ser lançados o mais rápido possível. A saída é 33 .6-5-7
- Aqui, duas em cada três interpretações são seguras. Você pode arredondar seu decimal para cima ou para baixo, para que 66 ou 67 fiquem bem.12-31-99
- Tudo bem, este é inequivocamente da virada do século (anos de 50 a 99 são 19XX e 31 não pode ser um mês). Um 0 grande e gordo , e você realmente deve limpar sua geladeira com mais frequência.
Você pode assumir com segurança que qualquer entrada que não atenda aos padrões acima não tem acesso às regras de saída acima.
Sem solicitações da Web ou brechas padrão. Bibliotecas de manipulação de datas são permitidas. Este é o código golf: que o programa mais curto vença.
* Se você estiver usando brainfuck ou algum idioma com deficiência de tipo de dados similar, poderá assumir que os valores ASCII dos três primeiros caracteres de entrada são os números inteiros da data. Isso exclui a lógica dos quatro dígitos do ano, com certeza, mas acho que ficaríamos muito surpresos ao ver uma solução para isso em Brainfuck para menosprezá-lo.