O ano solar é de 365 dias, 5 horas, 48 minutos, 45 segundos e 138 milissegundos, de acordo com este vídeo . Com o atual calendário gregoriano, as regras para os anos bissextos são as seguintes:
if year is divisible by 400, LEAP YEAR
else if year is divisible by 100, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Infelizmente, esse método é desativado em um dia a cada 3216 anos.
Um método possível de reformar o calendário é a seguinte regra:
if year is divisible by 128, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Isso tem o benefício de não exigir que alteremos nossos calendários novamente por mais 625.000 anos, mais ou menos.
Digamos que o mundo inteiro decida que, a partir de agora, usamos esse sistema a cada quarto ano é um ano bissexto, exceto a cada 128 anos, alterando nossos calendários da seguinte forma:
YEAR GREGORIAN 128-YEAR
2044 LEAP LEAP
2048 LEAP COMMON
2052 LEAP LEAP
...
2096 LEAP LEAP
2100 COMMON LEAP
2104 LEAP LEAP
...
2296 LEAP LEAP
2300 COMMON LEAP
2304 LEAP COMMON
2308 LEAP LEAP
Como isso afetaria nossos algoritmos do dia da semana?
O desafio
- Dada uma data do ano 2000 ao ano 100000, encontre o dia da semana nesse novo calendário.
- Qualquer formato de entrada e saída é permitido, desde que você especifique claramente quais formatos você está usando.
- Este é um código de golfe, então tente tornar suas soluções o mais golfistas possível!
Casos de teste
"28 February 2048" -> "Friday"
"March 1, 2048" -> "Sat"
(2100, 2, 29) -> 0 # 0-indexed with Sunday as 0
"2100-02-29" -> 7 # 1-indexed with Sunday as 7
"28 Feb. 2176" -> "Wednesday"
"1-Mar-2176" -> "Th"
"28/02/100000" -> "F" # DD/MM/YYYYYY
"Feb. 29, 100000" -> 6 # 1-indexed with Sunday as 7
"03/01/100000" -> 1 # MM/DD/YYYYYY and 1-indexed with Sunday as 1
Sugestões e comentários sobre o desafio são bem-vindos. Boa sorte e bom golfe!