Оу, чувак, эта дата истечения срока не записывает месяцы с буквами! Я не могу сказать, истекает ли это 10 марта или 3 октября ... Подождите, нет, неважно, год говорит о 2012. (alley-ой наполовину использованный кирпич сыра в мусорное ведро как профессионал)
Итак, давайте на минутку предположим, что вы слишком заняты, чтобы попытаться выяснить, когда должен закончиться срок действия этой банки маринары. Вы просто хотите версию Cliff Notes: насколько вероятно, что она просрочена? Давайте напишем некоторый код!
Вы знаете, что производители печатают дату в виде упорядоченной тройки целых чисел в одном из трех форматов:
YEAR MONTH DAY
MONTH DAY YEAR
DAY MONTH YEAR
И вы знаете, что некоторые даты можно интерпретировать только одним или двумя способами, а не всеми тремя: 55-й год 55-11-5
должен быть годом, означающим, что срок действия этой конкретной коробки Twinkies истек 5 ноября 1955 года. Год иногда дается в четыре цифры и не два, которые могут исключить некоторые варианты. Когда это две цифры, однако, 50..99 означает 1950..1999, а 0..49 означает 2000..2049.
Ваша задача - написать программу или функцию, которая принимает массив целых чисел, который является действительной датой хотя бы в одной из приведенных выше интерпретаций, и выдает процентную вероятность того, что это все еще хорошо. Процент вероятности - это просто процент действительных интерпретаций даты, которые относятся к сегодняшней дате или позже .
Массив целых чисел будет [Int]
типом вашего языка длины три, если он является аргументом функции, и задан как целые, разделенные пробелом или пробелом (вы можете выбрать), если он используется в качестве входных данных для STDIN для полная программа. *
«Сегодняшняя дата» может быть текущей фактической датой, полученной с помощью функции date, или датой, указанной в дополнительном аргументе функции или дополнительном параметре в STDIN. Это могут быть секунды эпохи Unix, другая тройка год-месяц-день, введенная одним из трех указанных выше способов, или другой более удобный способ.
Давайте иметь несколько примеров! Ввод даты окончания срока действия будет выполнен в стиле, разделенном тире, и для приведенных ниже примеров предполагается, что сегодняшняя дата - 5 июля 2006 года.
14-12-14
- Обе действительные интерпретации для этого (DMY и YMD) эквивалентны, 14 декабря 2014 года. Результат - 100, потому что этот продукт определенно все еще хорош.8-2-2006
- Последний номер, конечно же, год, поскольку он состоит из четырех цифр. Это может быть 8 февраля (истек) или 2 августа (все еще хорошо). Выход 50 .6-7-5
- Это может быть что угодно! Интерпретация «5 июля 2006 г.» все еще хороша (только на один день), но остальные два - в 2005 г. и должны быть отброшены как можно быстрее. Выход 33 .6-5-7
- Здесь две из трех интерпретаций безопасны. Вы можете округлить десятичную дробь вверх или вниз, так что с 66 или 67 все в порядке.12-31-99
- Хорошо, этот однозначно относится к рубежу веков (годы с 50 по 99 - 19XX, а 31 не может быть месяцем). Большой жирный 0 , и вы действительно должны почистить холодильник чаще.
Вы можете смело предположить, что любой вход, который не соответствует вышеуказанным стандартам, не относится к вышеприведенным правилам вывода.
Нет веб-запросов или стандартных лазеек. Библиотеки обработки даты разрешены. Это код гольф: пусть победит самая короткая программа.
* Если вы используете brainfuck или какой-либо подобный язык с недостатками типа данных, вы можете предположить, что значения ASCII первых трех символов на входе являются целыми числами для даты. Конечно, это исключает логику четырехзначного года, но я думаю, что мы были бы слишком изумлены, увидев решение этой проблемы в Brainfuck, чтобы подсказать вам за это.