Um ano comum é um ano que não é bissexto e onde o primeiro e o último dia do ano são no mesmo dia. Um ano comum especial é aquele que começa na segunda-feira e termina na segunda-feira também.
Seu desafio é criar um programa / função que, quando dado um ano como entrada, encontre o ano comum especial mais próximo, produzindo-se se for um ano comum. Se o ano estiver tão próximo do ano anterior quanto o próximo, produz o maior.
Entrada
Um número inteiro que representa o ano para o teste no intervalo 1600 <= x <= 2100
.
Resultado
Um número inteiro que representa o ano comum especial mais próximo.
Casos de teste
2017 -> 2018
2018 -> 2018
1992 -> 1990
1600 -> 1601
2100 -> 2103
1728 -> 1731 (lies between 1725 and 1731)
Notas
Todos os 54 anos no intervalo fornecido já são mostrados no artigo vinculado da Wikipedia. Também os fornecerei aqui para referência:
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 anos após o primeiro é outra, 11 anos depois que é outra, 11 anos depois que é outra, 6 anos após essa é outra, etc.a year that is not a leap year and where the first and last day of the year are on the same day
A segunda parte dessa definição é redundante. Todos os anos não bissextos começam e terminam no mesmo dia, com exatamente 52 semanas e um dia (365 dias).Respostas:
Gelatina , 30 bytes
Um link monádico recebendo e retornando um ano inteiro.
Experimente online! ou veja uma suíte de testes .
Quão?
Assim como outras respostas, isso cria a lista de anos necessária para o domínio de entrada a partir dos incrementos e encontra o ano máximo da diferença absoluta mínima da entrada.
fonte
PHP, 67 bytes
Experimente online!
ou
Experimente online!
Expandido
encontro
fonte
$i=($i<1)-$i;
Python 2 ,
129124118 bytesExperimente online! ou Experimente todos os casos de teste
Primeiro, a sequência é gerada (revertida) e
a
, em seguida,2401 - input_year
é usada como valor inicial a ser subtraído pela sequência.Dessa forma, a lista
o
conterá as diferenças entre todos os anos comuns e a entrada, o ano mais próximo será o número mais próximo de zero (positivo ou negativo) e será extraído(min, key=abs)
e adicionado novamente à entrada.Com
datetime
, 119 bytesExperimente online!
fonte
05AB1E , 41 bytes
Experimente online!
Explicação
fonte
JavaScript (ES6), 77 bytes
fonte
Mathematica, 70 bytes
Gera uma lista de todos os anos comuns especiais até o ano 5040 (= 7!) E, em seguida, localiza o mais próximo da entrada, utilizando o máximo em caso de empate.
fonte
Java 7, 217 bytes
Explicação:
Experimente aqui.
fonte
int d(int y, int x){}
parad(int y){int x = 1;...}
x
, por isso, se eu a redefinir sempre que estiver1
na parte superior do método,x
está incorreta e a chamada recursiva falhará.MATL ,
3231 bytesExperimente online! Ou verifique todos os casos de teste
fonte
C #, 183 bytes
Para fazer a bola rolar um pouco, aqui está uma implementação que eu mesmo fiz. Tenho certeza de que ainda pode ser jogado para baixo, por isso, se alguém quiser ficar à vontade para postar como uma nova resposta.
Experimente online!
Versão completa / formatada, isso também mostra todas as saídas para o intervalo especificado quando executado.
fonte
Ruby, 145 bytes
Define um lambda tomando o ano inicial como entrada -
f[2017] => 2018
Conseguiu amar a biblioteca padrão do Ruby!
wday==1
tem o mesmo comprimentomonday?
e é infinitamente menos legal :). A verificação especial do ano comum é feita pelo fato de que em um ano comum a partir de segunda-feira, 1º de junho, é uma sexta-feira ("sexta-feira" é o nome do dia com o menor número de dias!)Infelizmente, não é tão bom pesquisar nas duas direções.
fonte