When's the nearest special common year?
PHP, 67 Bytes
for(;date(LN,mktime(0,0,0,1,1,$y=$argn+$i))>1;)$i=($i<1)-$i;echo$y;
Try it online!
or
for(;date(LN,strtotime("1/1/".$y=$argn+$i))>1;)$i=($i<1)-$i;echo$y;
Try it online!
Expanded
for(;
date(LN,mktime(0,0,0,1,1,$y=$argn+$i)) # N is 1 for Monday and L is 0 for Non leap year
>1;) # loop so long as expression is not 1
$i=($i<1)-$i; # set $i 0,1,-1,2,-2 ...
echo$y; # Output Year
date
Python 2, 129 124 118 bytes
a=[11,11,6]*13
a[29:29]=a[19:19]=12,
a[10:10]=6,6
n=input()
o=[2401-n]
for i in a*2:o+=o[-1]-i,
print n+min(o,key=abs)
Try it online! or Try all test cases
First, the sequence is generated (reversed) on a
, then 2401 - input_year
is used as starting value to be subtracted over the sequence.
This way the list o
will contain the differences between all the common years and the input, the nearest year will be the number that is nearest to zero (positive or negative), then will be extracted with (min, key=abs)
and added back to the input.
With datetime
, 119 bytes
lambda i:i+min([y-i for y in range(2200,1500,-1)if datetime(y,1,1).weekday()<1and y%400],key=abs)
from datetime import*
Try it online!
05AB1E, 41 bytes
6xD<Š)•HΘ%A°,SΔA)u•3вè.pO0¸ì1601+DI-ÄWQϤ
Try it online!
Explanation
6xD<Š) # push the list [11,6,12]
•HΘ%A°,SΔA)u• # push the number 20129386383114231907032071
3в # convert to a base-3 digit list
è # use this to index into the first list
.p # get list of prefixes
O # sum each sublist
0¸ì # prepend 0
1601+ # add 1601 to each
D # duplicate
I- # subtract input from each
Ä # calculate absolute value
WQÏ # keep only the years that have the
# smallest absolute difference from input
¤ # get the last one