Aww, mec, cette date d'expiration n'écrit pas les mois avec des lettres! Je ne peux pas dire si elle expire le 10 mars ou le 3 octobre ... Attendez, non, ça ne fait rien, l'année 2012 est en cours .
Supposons donc un instant que vous soyez trop occupé pour essayer de raisonner quand ce pot de marinara est censé expirer. Vous voulez juste la version de Cliff Notes: quelle est la probabilité qu'il soit en retard? Ecrivons du code!
Vous savez que les fabricants impriment la date sous la forme d'un triple ordonné d'entiers, dans l'un des trois formats suivants:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
Et vous savez que certaines dates ne peuvent être interprétées que d'une ou deux manières, pas toutes les trois: le 55 dans 55-11-5
doit être une année, ce qui signifie que cette boîte particulière de Twinkies a expiré le 5 novembre 1955. L'année est parfois donnée en quatre chiffres et pas deux, ce qui peut exclure certaines options. Quand il s'agit de deux chiffres, 50..99 signifie 1950..1999 et 0..49 signifie 2000..2049.
Votre travail consiste à écrire un programme ou une fonction qui prend un tableau d’entiers qui est une date valide dans au moins une des interprétations ci-dessus, et génère un pourcentage de chance qu’il soit toujours bon. Le pourcentage de chance est simplement le pourcentage d'interprétations valides de la date qui sont postérieures ou postérieures à la date du jour.
Le tableau d’entiers sera le [Int]
type de longueur trois de votre langue s’il s’agit d’un argument pour une fonction et est indiqué sous la forme d’entiers entiers séparés par un tiret, une barre oblique ou un espace (vous devez choisir) s’il est utilisé comme entrée sur STDIN programme complet. *
La "date du jour" peut être la date du jour, obtenue via une fonction de date, ou la date indiquée dans un argument supplémentaire à function ou un paramètre supplémentaire dans STDIN. Il peut s’agir de secondes d’époque Unix, d’un autre triplet année-mois-jour entré d’une des manières ci-dessus, ou d’une autre manière plus pratique.
Ayons des exemples! La date d'expiration entrée sera dans le style séparé par tiret, et supposons pour les exemples ci-dessous que la date d'aujourd'hui est le 5 juillet 2006.
14-12-14
- Les deux interprétations valides pour cela (JJ et AMJ) sont équivalentes, le 14 décembre 2014. Le résultat est 100, car ce produit est définitivement bon.8-2-2006
- Le dernier chiffre est un an, bien sûr, puisqu'il comporte quatre chiffres. Cela pourrait être soit le 8 février (expiré) ou le 2 août (toujours bon). La sortie est 50 .6-7-5
- Cela pourrait être n'importe quoi! L’interprétation du "5 juillet 2006" est toujours valable (pour une journée seulement), mais les deux autres sont toutes les deux en 2005 et devraient être lancées le plus rapidement possible. La sortie est 33 .6-5-7
- Ici, deux interprétations sur trois sont sans danger. Vous pouvez arrondir votre décimale vers le haut ou le bas. 66 ou 67 sont donc acceptables.12-31-99
- D'accord, celui-ci est sans équivoque depuis le début du siècle (les années 50 à 99 sont 19XX et 31 ne peuvent pas être d'un mois). Un gros gros 0 , et vous devriez vraiment nettoyer votre réfrigérateur plus souvent.
Vous pouvez sans risque supposer que toute entrée qui ne répond pas aux normes ci-dessus n'est pas au courant des règles de sortie ci-dessus.
Pas de demandes Web ou de lacunes standard. Les bibliothèques de traitement de date sont autorisées. C'est du code golf: que le programme le plus court gagne.
* Si vous utilisez brainfuck ou un langage similaire handicapé par les types de données, vous pouvez supposer que les valeurs ASCII des trois premiers caractères en entrée sont les entiers de la date. Cela exclut la logique des années à quatre chiffres, bien sûr, mais je pense que nous serions trop étonnés de voir une solution à cela dans Brainfuck pour vous en vouloir.