Wspólny rok to rok, który nie jest rokiem przestępnym i gdzie pierwszy i ostatni dzień w roku są tego samego dnia. Specjalny wspólny rok to taki, który rozpoczyna się w poniedziałek i tak kończy się w poniedziałek, jak również.
Wyzwanie polega na utworzeniu programu / funkcji, która po podaniu roku jako najbliższego specjalnego specjalnego roku, generuje wynik, jeśli jest to wspólny rok. Jeśli rok jest zbliżony do roku przed nim, jak rok obok, należy wydać większy.
Wejście
Liczba całkowita reprezentująca rok, w którym ma być testowany zakres 1600 <= x <= 2100
.
Wynik
Liczba całkowita reprezentująca najbliższy specjalny wspólny rok.
Przypadki testowe
2017 -> 2018
2018 -> 2018
1992 -> 1990
1600 -> 1601
2100 -> 2103
1728 -> 1731 (lies between 1725 and 1731)
Notatki
Wszystkie 54 lata w podanym zakresie są już pokazane w powiązanym artykule w Wikipedii. Podam je również tutaj w celach informacyjnych:
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
. IE 6 lat po pierwszej jest kolejna, 11 lat po niej jest kolejna, 11 lat po niej jest kolejna, 6 lat po niej jest kolejna itd.a year that is not a leap year and where the first and last day of the year are on the same day
Druga część tej definicji jest zbędna. Wszystkie lata bez przestępowania rozpoczynają się i kończą tego samego dnia, trwając dokładnie 52 tygodnie i jeden dzień (365 dni).Odpowiedzi:
Galaretka , 30 bajtów
Monadyczny link przyjmujący i zwracający liczbę całkowitą.
Wypróbuj online! lub zobacz pakiet testowy .
W jaki sposób?
Podobnie jak inne odpowiedzi, ta buduje listę lat wymaganą dla domeny wejściowej z przyrostów i znajduje maksymalny rok minimalnej absolutnej różnicy od danych wejściowych.
źródło
PHP, 67 bajtów
Wypróbuj online!
lub
Wypróbuj online!
Rozszerzony
data
źródło
$i=($i<1)-$i;
Python 2 ,
129124118 bajtówWypróbuj online! lub Wypróbuj wszystkie przypadki testowe
Najpierw sekwencja jest generowana (odwrócona)
a
, a następnie2401 - input_year
używana jako wartość początkowa do odjęcia od sekwencji.W ten sposób lista
o
będzie zawierać różnice między wszystkimi wspólnymi latami a danymi wejściowymi, najbliższy rok będzie liczbą najbliższą zeru (dodatnią lub ujemną), a następnie zostanie wyodrębniony za pomocą(min, key=abs)
i ponownie dodany do danych wejściowych.Z
datetime
119 bajtówWypróbuj online!
źródło
05AB1E , 41 bajtów
Wypróbuj online!
Wyjaśnienie
źródło
JavaScript (ES6), 77 bajtów
źródło
Mathematica, 70 bajtów
Generuje listę wszystkich specjalnych wspólnych lat do roku 5040 (= 7!), A następnie znajduje najbliższy do danych wejściowych, biorąc maksimum w przypadku remisu.
źródło
Java 7, 217 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
źródło
int d(int y, int x){}
nad(int y){int x = 1;...}
x
, więc jeśli zresetuję go za1
każdym razem na początku metody,x
jest niepoprawne, a wywołanie rekurencyjne zakończy się niepowodzeniem.MATL ,
3231 bajtówWypróbuj online! Lub sprawdź wszystkie przypadki testowe
źródło
C #, 183 bajtów
Aby trochę rzucić piłkę, oto moja własna implementacja. Jestem prawie pewien, że nadal można go odłożyć w golfa, więc jeśli ktoś chce napisać jako nową odpowiedź.
Wypróbuj online!
Wersja pełna / sformatowana, pokazuje również wszystkie wyjścia dla danego zakresu po uruchomieniu.
źródło
Rubin, 145 bajtów
Definiuje lambda przyjmującą rok początkowy jako dane wejściowe -
f[2017] => 2018
Uwielbiam standardową bibliotekę Ruby!
wday==1
ma taką samą długośćmonday?
i jest nieskończenie mniej fajny :). Specjalna wspólna kontrola roku polega na tym, że we wspólnym roku rozpoczynającym się w poniedziałek, 1 czerwca jest piątek („piątek” to nazwa najkrótszego dnia!)Niestety wyszukiwanie w obu kierunkach nie jest tak dobre.
źródło