Общий год является годом , что не високосный год , и где первый и последний день года в тот же день. Особый общий год является один , который начинается в понедельник и так заканчивается на понедельник , а также.
Ваша задача состоит в том, чтобы создать программу / функцию, которая при задании года в качестве входных данных находит ближайший специальный общий год и выводит себя, если это общий год. Если год настолько близок к предыдущему, как год к нему, выведите больший.
вход
Целое число, представляющее год для проверки в диапазоне 1600 <= x <= 2100
.
Выход
Целое число, представляющее ближайший специальный общий год.
Контрольные примеры
2017 -> 2018
2018 -> 2018
1992 -> 1990
1600 -> 1601
2100 -> 2103
1728 -> 1731 (lies between 1725 and 1731)
Заметки
Все 54 года в данном диапазоне уже показаны в связанной статье Википедии. Я также предоставлю их здесь для справки:
1601, 1607, 1618, 1629, 1635, 1646, 1657, 1663, 1674, 1685, 1691
1703, 1714, 1725, 1731, 1742, 1753, 1759, 1770, 1781, 1787, 1798
1810, 1821, 1827, 1838, 1849, 1855, 1866, 1877, 1883, 1894, 1900
1906, 1917, 1923, 1934, 1945, 1951, 1962, 1973, 1979, 1990
2001, 2007, 2018, 2029, 2035, 2046, 2057, 2063, 2074, 2085, 2091
2103 (Needed for 2097 to 2100)
6, 11, 11
. То есть через 6 лет после первого - еще один, через 11 лет - еще один, через 11 лет - еще один, через 6 лет - еще один и т. Д.a year that is not a leap year and where the first and last day of the year are on the same day
Вторая часть этого определения является избыточной. Все не високосные годы начинаются и заканчиваются в один и тот же день и составляют ровно 52 недели и один день (365 дней).Ответы:
Желе , 30 байт
Монадическая ссылка, берущая и возвращающая целочисленный год.
Попробуйте онлайн! или посмотрите набор тестов .
Как?
Подобно другим ответам, он строит список лет, требуемых для входной области из приращений, и находит максимальный год минимальной абсолютной разницы от входных данных.
источник
PHP, 67 байт
Попробуйте онлайн!
или же
Попробуйте онлайн!
расширенный
Дата
источник
$i=($i<1)-$i;
Python 2 ,
129124118 байтПопробуйте онлайн! или Попробуйте все тестовые случаи.
Сначала генерируется (реверсируется) последовательность
a
, затем2401 - input_year
используется в качестве начального значения, которое вычитается из последовательности.Таким образом, список
o
будет содержать различия между всеми общими годами и входными данными, ближайший год будет числом, ближайшим к нулю (положительному или отрицательному), затем будет извлечен(min, key=abs)
и добавлен обратно к входным данным.С
datetime
, 119 байтовПопробуйте онлайн!
источник
05AB1E , 41 байт
Попробуйте онлайн!
объяснение
источник
JavaScript (ES6), 77 байт
источник
Mathematica, 70 байт
Создает список всех специальных общих лет до 5040 года (= 7!), А затем находит ближайший к входу, беря максимум в случае связи.
источник
Java 7, 217 байт
Объяснение:
Попробуй это здесь.
источник
int d(int y, int x){}
наd(int y){int x = 1;...}
x
, поэтому, если я сбрасываю его1
каждый раз в начале метода,x
это неверно, и рекурсивный вызов потерпит неудачу.MATL ,
3231 байтПопробуйте онлайн! Или проверьте все тестовые случаи
источник
C #, 183 байта
Чтобы немного покататься, вот реализация, которую я сделал самостоятельно. Я почти уверен, что это все еще может быть в гольфе, так что если кто-то хочет, не стесняйтесь, отправляйте как новый ответ.
Попробуйте онлайн!
Полная / отформатированная версия, также показывает все выходные данные для заданного диапазона при запуске.
источник
Рубин, 145 байт
Определяет лямбду, принимая в качестве входного значения начальный год -
f[2017] => 2018
Должен любить стандартную библиотеку Ruby!
wday==1
такой же длины, какmonday?
и бесконечно менее крутой :). Специальная проверка общего года выполняется тем, что в обычном году, начинающемся с понедельника, 1 июня, это пятница («пятница» - наименее короткое название дня!)К сожалению, поиск не очень хорош в обоих направлениях.
источник