Учитывая дату, записанную в любом (должен обрабатывать все в одной и той же программе) из следующих форматов, проанализируйте ее в действительном yyyy/mm/dd date
.
17th May 2012
March 14th, 2016
20 February 2014
September 14, 2017
Sunday, June 8, 2015
правила
- Даты иногда будут недействительными, т.е. неправильный день для месяца или количество месяцев в году, вы должны обработать оба случая. Выбираете ли вы ошибку или возвращаете постоянное значение Falsey. (Однако они будут придерживаться шаблонов форматов выше)
- Заполнение для дней и месяцев менее 10 должно использоваться для создания двузначного вывода.
- Названия месяцев всегда будут полными, а не сокращенными до трехзначных.
- Вы можете предположить, что год всегда будет в диапазоне 0000-9999.
- Отрицательные числа не должны быть обработаны.
- Вы можете создать полную программу или функцию, чтобы вывод мог быть в любом формате, распечатан на консоль или возвращен из функции.
- Ввод всегда будет строкой, выход всегда должен быть строкой, если это делает его короче, чтобы он воспринимался как один аргумент в массиве, например.
["17th May 2012"]
Вы можете сделать это, и результат может быть таким же["2012/05/17"]
- Вы можете предположить, что правописание при вводе будет правильным.
БОНУС: потому что, кто здесь не любит вызов;)
Если вам удастся также разрешить входные форматы The Fourteenth of March, 2016
или March the Fourteenth, 2016
вы можете удалить из своего кода дополнительные 20 байтов с любым конечным числом байтов, меньшим 1, что приведет к 1.
Вот полные цифры для каждого дня, чтобы избежать путаницы в написании.
First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Nineth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, Fifteenth, Sixteenth, Seventeenth, Eighteenth, Nineteenth, Twentieth, Twenty First, Twenty Second, Twenty Third, Twenty Fourth, Twenty Fifth, Twenty Sixth, Twenty Seventh, Twenty Eighth, Twenty Nineth, Thirtieth, Thirty First
Тестовые случаи
INPUT | Output
17th May 2012 | 2012/05/17
March 14th, 2016 | 2016/03/14
20 February 2014 | 2014/02/20
September 14, 2017 | 2017/09/14
Sunday, June 8, 2015 | 2015/06/08
1st January 1918 | 1918/01/01
The Fourteenth of March, 2016 | 2016/03/14
March the Fourteenth, 2016 | 2016/03/14
November the Seventeenth, 2019 | 2019/11/17
The Thirtieth of April, 2016 | 2016/04/30
30 February 2014 | Invalid
September 99, 2017 | Invalid
Sunday, June8, 2015 | Invalid
The Thirty First of April, 2016 | Invalid
20 February 2014
это по умолчанию поддерживается в много финиковых анализаторах, но17th
иSunday, June 8, 2015
немного более трудно разобрать ( в зависимости от языка).Thursday, August 25, 2017
действительным? Я вижу представления, игнорирующие DOW.Ответы:
Рельсы,
41,3735 байтЯ не знаю онлайн-переводчика для Rails, но вот скриншот, демонстрирующий этот процесс
источник
PowerShell ,
91899156 байтПопробуйте онлайн!
Принимает ввод в виде строки. Использует a,
-replace
чтобы избавиться от мусора, затем использует встроеннуюGet-Date
команду с-f
флагом ormat, чтобы указать требуемыйyyyy/MM/dd
формат. Эта строка остается в конвейере и вывод неявный.Сохранено два байта благодаря мистеру Xcoder. Сохранение огромного куска благодаря регулярному игре в гольф TessellatingHeckler.
источник
''
из формата даты, для -2. Если вы хотите придерживаться своего подхода, учитывая «правильное написание», то вы можете заменить'th|rd|st|(\b.*)day|,'
его, и оно уменьшается до 56 байт и обрабатывает те же случаи. Хотя я думаю, что это неправильно, потому что, если вы отбросите дни, вы не сможете взятьSunday, June8, 2015 | Invalid
дело, потому что это был понедельник. Должно появиться сообщение об ошибке, но оно анализируется как действительное. Не уверен, какое решение будет принято, или если другие проверяют это.PHP,
73164 + 1 байтЗапустите как трубу с
-nR
или попробуйте онлайн .Проверка даты была действительно дорогой: мне пришлось разобрать дату перед использованием встроенной функции, затем попытаться с ошибкой в названии месяца.
источник
30 February 2014
возвращается2014/03/02
. Выбираете ли вы ошибку или возвращаете постоянное значение Falsey. (Однако они будут придерживаться шаблонов форматов выше)Библиотека Python 3 + parsedatetime,
152139155153 байтаСохранено 13 байтов благодаря Джонатану Аллану
Добавлено 16 байтов для обработки дат с недопустимыми днями
Сохранено 2 байта путем удаления лямбда-присваивания
Попробуйте онлайн!
Не поддерживает бонусные даты
источник
None
;import ...as
; &lambda
, повторно используяparse
какh
.Python 2 , 193 байта
Попробуйте онлайн!
; -; пожалуйста Halp
источник
time
.f=
из числа байтов на TiO), объявивre.sub
Java (OpenJDK 8) , 190 + 26 = 216 байт
Попробуйте онлайн!
Важное примечание: было короче также проверять день недели, а не исключать его, так что проверка включена!
Я не пробовал,
SimpleDateFormat
кроме очевидных случаев, когда все принимаемые даты, как 30 февраля. Поэтому мне пришлось отказаться от него, и я использовал Java 8DateTimeFormatter
.объяснение
Этот формат означает:
[EEEE, ]
(происходит вSunday, ...
),[d ]
,MMMM
и пробелом,[d, ]
,uuuu
чтобы дать парсеру понять, что мы находимся в григорианской эре.Код:
кредиты
источник
replaceAll
шаблоне?JavaScript (ES6),
124122 байтаисточник
2015/06/07
дляJune 8, 2015
(UTC проблема? Я в UTC + 2) иfalse
для либоSunday, June 8, 2015
илиMonday, June 8, 2015
.nday
.