Входные данные:
А Дата (содержащий dd
, MM
и yyyy
). Объект даты или три отдельных целых числа также допустимы в качестве входных данных.
Выход:
Каждая часть ( dd
, MM
а yyyy
) индивидуально вернулся и чем округлены до ближайшей действительной даты.
Например (в формате dd-MM-yyyy
):
21-10-2016
становится12-01-6102
Правила соревнований:
- Только
dd
,MM
,yyyy
действительно, но порядок и какие отдельные-символы , которые вы используете ваш собственный выбор.
Так вот некоторые действительные примеры формата:dd-MM-yyyy
;MM/dd/yyyy
;yyyy MM dd
;ddMMyyyy
И т.д.
И это лишь некоторые примеры недопустимого формата:dd MMM yyyy
;dd-MM-'yy
; и т.п. - Вы также можете просто ввести объект Date, если ваш язык поддерживает его, или три отдельных целочисленных параметра вместо строки, представляющей дату.
- Пожалуйста, укажите, какой формат даты вы использовали! (И вход, и выход должны быть в одном и том же формате.) Также разрешено выводить объект Date, при условии, что он может обрабатывать все тестовые случаи и приведенное ниже правило вызова.
- Переход от юлианского к григорианскому календарю в этом вызове игнорируется. Так что
1582
это просто действительный перевернутый год для2851
.
См. Информацию о вызовах / советы для всех действительных лет, месяцев и дней. - Поскольку вы не можете иметь февраль как противоположный любому другому месяцу, вам не нужно беспокоиться о високосных годах.
Все обратные годы, месяцы и дни:
- Год всегда можно без проблем поменять местами , начиная с 0001 (перевернутый
1000
) до 9999 (остаётся9999
). (0000
Это неверный ввод, и для него также нет тестов). - Единственные месяцы, которые вы изменили, это: январь (в обратном порядке с октября /
10
); Октябрь (в обратном порядке с января /01
); Ноябрь (остается ноябрь /11
); и декабрь (в обратном порядке через месяц /02
-09
,12
). - Единственные дни, которые вы изменили: 01 (обратный от
10
), 02 (обратный от20
), 03 (обратный от30
), 10 (обратный от01
), 11 (остающийся11
), 12 (обратный от21
), 13 (обратный от31
) , 20 (перевернуто с02
), 21 (перевернуто с12
), 22 (осталось22
), 30 (перевернуто с03
или аналогично 31 за ноябрь!), 31 (перевернуто с04
-09
/13
-19
/23
-29
).
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - К вашему ответу применяются стандартные правила , поэтому вы можете использовать STDIN / STDOUT, функции / метод с соответствующими параметрами и оператором возврата / вывода, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода.
- Также, пожалуйста, добавьте объяснение, если это необходимо.
Тестовые случаи ( dd-MM-yyyy
как формат):
21-07-2016 -> 12-12-6102
12-11-1991 -> 21-11-1991
01-01-2000 -> 10-10-0002
27-08-1875 -> 31-12-5781
18-12-2010 -> 31-12-0102
13-01-1981 -> 31-10-1891
04-11-1671 -> 30-11-1761 // Semi-tricky case, since November has 30 days
28-11-2036 -> 30-11-6302 // Semi-tricky case, since November has 30 days
14-06-1855 -> 31-12-5581
30-10-9999 -> 03-01-9999
01-01-2851 -> 10-10-1582
21-07-2016
возвращается,12-70-6102
округляется до12-12-6102
. Не уверен, как вы получите результат##-10-6107
..70
, с возрастом.10-10-2
действительный вывод в третьем случае?Ответы:
Выпуклый , 23 байта
Подсчет байтов предполагает кодирование CP-1252.
Формат ввода / вывода есть
dd mm yyyy
.Попробуйте онлайн!
Это прямой порт моего ответа CJam . Convex в значительной степени основан на CJam, и поэтому единственным отличием является использование
¶
оператора Convex, который упаковывает два верхних элемента стека в список, сохраняя байты[...]
.источник
CJam, 24 байта
Формат ввода / вывода есть
dd mm yyyy
.Попробуйте онлайн!
Одинаковое количество байтов, формат ввода / вывода
mm dd yyyy
:Попробуйте онлайн!
объяснение
Другая версия работает аналогично, за исключением того, что мы начинаем с целого числа
1230
или1231
перед преобразованием его в["12" "30"]
или["12" "31"]
.источник
1=
перевернутый месяц, проверим,:=
равны ли его цифры, и^
сожжет результат в 31, получив 30 для месяца11
и 31 для всего остального.Pyth,
5553464341 байтгде
❤❤
были два непечатаемых, соответственно U + 001C и U + 001F.Тестирование.
источник
Python 3, 82 байта
Анонимная функция, которая принимает через аргумент ввод даты в виде списка строк формы
['dd', 'mm', 'yyyy']
и возвращает проверенную обратную дату в том же формате.Как это устроено
Python сравнивает символы и строки по их кодам Unicode. Это означает, что любое сравнение двух или более целых чисел возвращает то же самое сравнение с этими целыми числами как строки. Следовательно, вызов
min
двух целых чисел в виде строк возвращает наименьшее целое число в виде строки; принимая перевернутую часть даты в качестве одного аргумента и максимальное значение в качестве другого, день и месяц ограничиваются требуемым диапазоном. Части даты переворачиваются с помощью индексации с помощью шагов-1
([::-1]
), и максимальное значение для месяца изменяется с'31'
на,'30'
если месяц является ноябрьским, путем индексации в список с логическим результатом условия.Попробуйте это на Ideone
источник
Дьялог АПЛ ,
3233 байтаВвод / вывод - это список из трех строк (
'dd' 'mm' 'yyyy'
).ПопробуйтеAPAPL , но обратите внимание, что
⎕
(запрос на ввод) был заменен на,⍵
а вся строка заключена в{
...,}
чтобы включить онлайн-тестирование, и⍎
(выполнить выражение) была заменена на2⊃⎕VFI
(проверить и исправить ввод), потому что выполнение произвольного кода заблокировано ,источник
C #
314305299249232223 байтаСпасибо @KevinCruijssen за указание на то, что я могу сократить объявление переменной, что также позволило псевдонимам строки сохранять некоторые байты.
Сохранено 50 байтов, в которых хранится функция реверсирования для повторного использования, и еще 13, выполнив то же самое для округления и удаления объявлений переменных.
Последнее обновление делает псевдоним строки больше не заставкой байтов.
Безголовая версия:
Проверьте это здесь
источник
using System.Linq;
и функцией, так что это -1 байт. Кроме того,var n=...;var e=...;
можно использовать 1 байт, используя это вместо этого:string n=...,e=...;
это не так много, но все равно -2 байта. ;)Javascript,
10610594 байтовТестовый пакет (ред. 3)
объяснение
Благодаря @KevinCruijssen для экономии 1 байт для
b==1
кb<2
. Спасибо @Neil за сохранение 11 байтов, предложив шаблонный литерал ES6 и,
разделитель.источник
b==1
разбираюсь в JS, так что поправьте меня, если я скажу что-то не так, но не могу проиграть,b<2
чтобы сэкономить байт? Это больше не может быть 0, так как вы уже проверили это в!b?
части кода. Кажется, он работает в вашем тестовом наборе, когда я его меняю.join``
вместо,join('')
например - но вы можете сэкономить немного больше, используя в,
качестве разделителя, который позволяет вам+''
объединять три значения вместе.,
в виду в качестве разделителя на входе?Ruby,
9284 + 1 (-p
флаг) =9385 байтИспользуется
-
как разделитель.источник
Пайк, 29 байт
Попробуй это здесь!
Я определенно вижу, что это игра в гольф
источник
Python 2, 154 байта
Принимает входные данные в виде строки, поэтому во входных данных необходимо указывать кавычки, например, «11-04-2016».
источник
z=[x[::-1]for x in z];z[1]=min(z[1],'12');z[0]=min(z[0],['31','30'][z[1]=='11']);print"-".join(z)
. По сути, вам вообще не нужно его использоватьr
, и выmin
выполняете много вещей, которые вы хотите сделать.05AB1E , 24 байта
Порт ответа CJam от @MartinEnder , а также ввод и вывод в виде строки в формате
dd MM yyyy
.Попробуйте онлайн или проверьте все тесты .
Объяснение:
источник