Это вдохновлено одним из вопросов Даунгоата в Песочнице, где я предложил, чтобы он включил 31 апреля как день Пи для людей, которые используют формат день / месяц, только для того, чтобы он сообщил мне, что 31 апреля нет!
Если задана строка даты в формате месяц / день , которая может быть недопустимой, выведите правильную дату с помощью ролловера. (Сначала перенесите месяц, затем перенесите день).
Примеры:
«15/43» - это читается как 43-й день 15-го месяца. Сначала мы переносим месяц на следующий год, поэтому у нас получается 3 (март). Теперь, поскольку в марте только 31 день, мы переносим дополнительные дни на апрель, поэтому мы выводим фактическую дату как «4/12» (12 апреля).
«3/16» - это действительная дата (16 марта). Верни как есть.
«12/64» - Ах, как много приятных воспоминаний о 64 декабря ... Декабрь имеет 31 день, январь - 31 день, так что я на самом деле имею в виду «2/2» (2 февраля).
«19/99» - во-первых, 19 становится 7 (июль). В июле 31 день, в августе 31 день, в сентябре 30 дней, поэтому выходное значение равно «10/7» (7 октября).
«1/99999» - год имеет 365 дней. 99999 (mod 365) = 354. 354 дня года - «12/20» .
«9999999/10» - очевидно, 9999999 (мод. 12) = 3, так что это «3/10» (10 марта).
Критерии:
Месяц ввода - это целое число> 0. День ввода - это целое число> 0. Год не нужно указывать, так как для этого не существует високосных лет.
Обновить:
Поскольку я думаю, что это слишком упростит задачу, функции календаря, такие как функции в классе Java Calendar , запрещены. Функции разбора и форматирования даты все еще разрешены.
1/99999
должен дать,12/19
я думаю.Ответы:
LabVIEW, 32 примитива LabVIEW
источник
C #,
269223Редактировать : Исправлена работа в таких случаях, как 24/1, 36/1 и т. Д. И немного гольф. Спасибо за комментарии, я сохранил несколько мест!
Ungolfed:
источник
24/1
.Console.Write
более чемreturn
, и в C # я бы использовалchar[]
в качестве заменыstring
, но это такое же количество символов и делает разбиение на/
более проблематичным. Но ваша заметка в словаре привела меня к лучшей версии!R
208182 байтаПолучите месяц, разделив его на 12, затем выполните цикл, удаляя количество дней в текущем месяце, пока не получите отрицательное число., Переверните последний шаг и напечатайте.
На нескольких строках (необходимо использовать файл и его источник):
источник
PHP> = 5,5, 181 байт
PHP почти поддерживает ролловер только с инструкциями разбора даты и форматирования. Например:
Тем не менее, как только число становится больше 100, PHP отклоняет его разбор и возвращает ошибку (возможно, по какой-то произвольной причине). Итак, теория с этим ответом - вернуть его туда, где PHP его проанализирует, а затем отправить
date_create_from_format()
.Ungolfed:
Попробуйте онлайн
источник
$argv
или STDIN.$t
в$argv[1]
и теперь он считывает из ввода командной строки.JavaScript (ES6), 106 байт
объяснение
Тестовое задание
Показать фрагмент кода
источник
Неконкурентный ответ - Bash + coreutils, 55
«Функции анализа / форматирования даты все еще разрешены», - я предполагаю, что это означает, что
date
утилита разрешена.Ввод читается из командной строки, например:
Это не конкурирует, потому что команда date расширяется до чего-то вроде этого, который добавляет количество дней:
источник
date.add(875)
на увеличение даты на 875 дней. Это в основном то, что я собирался после.date
команда здесьdate -d1-3-1+42day +%-m/%-d
, так что она делает именно это. Я думаю, что это неконкурентный ответ :(