Un año común es un año que no es bisiesto y donde el primer y último día del año son el mismo día. Un año común especial es aquel que comienza un lunes y también termina un lunes.
Su desafío es crear un programa / función que, cuando se le da un año como entrada, encuentre el año común especial más cercano y se genere si es un año común. Si el año está tan cerca del anterior como el que está al lado, se obtiene el más grande.
Entrada
Un entero que representa el año para probar en el rango 1600 <= x <= 2100
.
Salida
Un entero que representa el año común especial más cercano.
Casos de prueba
2017 -> 2018
2018 -> 2018
1992 -> 1990
1600 -> 1601
2100 -> 2103
1728 -> 1731 (lies between 1725 and 1731)
Notas
Los 54 años en el rango dado ya se muestran en el artículo de Wikipedia vinculado. También los proporcionaré aquí como referencia:
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 años después de la primera, es otro de 11 años después de eso es otra, 11 años después de que es otro, 6 años después de eso es otro, etc.a year that is not a leap year and where the first and last day of the year are on the same day
La segunda parte de esa definición es redundante. Todos los años no bisiestos comienzan y terminan el mismo día, con una duración exacta de 52 semanas y un día (365 días).Respuestas:
Jalea , 30 bytes
Un enlace monádico que toma y devuelve un año entero.
Pruébalo en línea! o ver un conjunto de pruebas .
¿Cómo?
Al igual que otras respuestas, esto crea la lista de años necesarios para el dominio de entrada a partir de los incrementos, y encuentra el año máximo de diferencia absoluta mínima de la entrada.
fuente
PHP, 67 bytes
Pruébalo en línea!
o
Pruébalo en línea!
Expandido
fecha
fuente
$i=($i<1)-$i;
Python 2 ,
129124118 bytesPruébalo en línea! o Pruebe todos los casos de prueba
Primero, la secuencia se genera (se invierte)
a
, luego2401 - input_year
se usa como valor inicial para restar sobre la secuencia.De esta manera, la lista
o
contendrá las diferencias entre todos los años comunes y la entrada, el año más cercano será el número más cercano a cero (positivo o negativo), luego se extraerá(min, key=abs)
y se agregará nuevamente a la entrada.Con
datetime
119 bytesPruébalo en línea!
fuente
05AB1E , 41 bytes
Pruébalo en línea!
Explicación
fuente
JavaScript (ES6), 77 bytes
fuente
Mathematica, 70 bytes
Genera una lista de todos los años comunes especiales hasta el año 5040 (¡= 7!) Y luego encuentra el más cercano a la entrada, tomando el máximo en caso de empate.
fuente
Java 7, 217 bytes
Explicación:
Pruébalo aquí.
fuente
int d(int y, int x){}
ad(int y){int x = 1;...}
x
, por lo que si lo restablezco a1
cada vez en la parte superior del método,x
es incorrecto y la llamada recursiva fallará.MATL ,
3231 bytesPruébalo en línea! O verificar todos los casos de prueba
fuente
C #, 183 bytes
Para que la pelota ruede un poco, aquí hay una implementación que hice por mi cuenta. Estoy bastante seguro de que aún se puede jugar golf, así que si alguien quiere sentirse libre de publicar una nueva respuesta.
Pruébalo en línea!
Versión completa / formateada, esto también muestra todas las salidas para el rango dado cuando se ejecuta.
fuente
Ruby, 145 bytes
Define una lambda tomando el año de inicio como entrada -
f[2017] => 2018
¡Tengo que amar la biblioteca estándar de Ruby!
wday==1
tiene la misma longitudmonday?
e infinitamente menos genial :). La verificación especial del año común se realiza por el hecho de que en un año común que comienza el lunes, el 1 de junio es un viernes (¡"viernes" es el nombre del día más corto!)Desafortunadamente, no es tan bueno buscando en ambas direcciones.
fuente