Для григорианских календарей формат даты варьируется от страны к стране. Существует три основных формата:
YY-MM-DD
(Большой обратный порядок байт)DD-MM-YY
(Прямой порядок байтов)MM-DD-YY
(Средний порядок байт)
Ваша задача - написать программу, которая с учетом входной строки, представляющей дату, выведет все возможные форматы даты, по которым эту строку можно интерпретировать как дату.
правила
- Дата ввода указывается в формате
xx-xx-xx
, где каждое поле состоит из двух цифр и дополняется нулями. - Дата всегда действительна (поэтому вы не можете получить такие вещи, как 14-13-17)
- Дата всегда соответствует как минимум одному из указанных выше форматов (поэтому вы не можете получить такие вещи, как 17-14-11)
- Поскольку мы на самом деле в параллельном мире, на каждый месяц года выделяется 31 день , и, следовательно, нет високосных лет.
- Дата между 1 января 2001 г. и 31 декабря 2099 г.
- Если для даты существует только один формат, код должен печатать только ее (разрешены только конечные переводы строки)
- Если для даты существует несколько форматов, они должны быть разделены запятой, пробелом, символом новой строки или их комбинацией.
- Вы должны вывести точное название (я) формата (ов). Использование разных произвольных значений не допускается.
- Не допускаются начальные или конечные символы, кроме пробела
- Вывод должен быть строчным
- Вам не разрешено использовать какие-либо встроенные функции даты или календаря
- Выходные форматы не должны быть отсортированы
Примеры
Input Output
30-05-17 big-endian, little-endian
05-15-11 middle-endian
99-01-02 big-endian
12-11-31 big-endian, little-endian, middle-endian
02-31-33 middle-endian
Это код-гольф, поэтому выигрывает самый короткий код в байтах. Пояснения приветствуются.
there are 31 days for every month of the year, and consequently no leap years
Таким образом, это означает, что любая библиотека дат фактически бесполезна для этого?Ответы:
05AB1E , 40 байт
Попробуйте онлайн!
объяснение
источник
Python 2 , 123 байта
Попробуйте онлайн!
Python 2 , меньше разбор ввода, 123 байта
Попробуйте онлайн!
источник
,
.JavaScript (ES6),
121119118112 байтВозвращает разделенную пробелами строку с завершающим пробелом.
Как?
Разобьем входные данные на a , b и c . Поскольку дата гарантированно является действительной, мы точно знаем, что b меньше 32. Поэтому достаточно проверить, меньше ли a, чем 13, чтобы проверить формат среднего порядка байтов. Для форматов с прямым порядком байтов и байтов с обратным порядком байтов b должно быть меньше 13, а для проверки дня - еще один тест для a и c соответственно.
Отсюда 3 теста:
Контрольные примеры
Показать фрагмент кода
источник
Баш,
240125116112 байтGolfed.
Спасибо manatwork за несколько советов
Сохранено 9 байт, удаляющих проверку менее 32 в ответе Арнольда
Сохранено 4 байта с использованием различных переменных вместо массива
Попробуй это!
источник
C #, 180 байт
Выходы с только значениями, разделенными пробелами, также могут иметь начальные и конечные пробелы. Обновится, когда ОП уточнит этот момент, если это необходимо.
Полная / Отформатированная версия:
источник
No leading or trailing characters others than a trailing space are allowed
PHP, 151 байт
Testcases
источник
Пакет, 138 байт
Смутно, основываясь на ответе @ ovs.
источник
Java 232 байта
Вот более хорошая версия
Я действительно не знал, как отформатировать эту часть ...
источник
String e="-endian",b="big"+e,m="middle"+e,l="little"+e;
.PHP, 131 байт
источник