L'année solaire est de 365 jours, 5 heures, 48 minutes, 45 secondes et 138 millisecondes, selon cette vidéo . Avec le calendrier grégorien actuel, les règles pour les années bissextiles sont les suivantes:
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
Malheureusement, cette méthode est désactivée d'un jour tous les 3216 ans.
Une méthode possible pour réformer le calendrier est la règle suivante:
if year is divisible by 128, COMMON YEAR
else if year is divisible by 4, LEAP YEAR
else, COMMON YEAR
Cela a l'avantage de ne pas nous obliger à changer à nouveau nos calendriers pendant encore 625 000 ans, à donner ou à prendre.
Supposons que le monde entier décide que, à partir de maintenant, nous utilisons ce système de chaque quatrième année est une année bissextile sauf tous les 128 ans, en changeant nos calendriers comme suit:
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
Comment cela affecterait-il nos algorithmes de jour de la semaine?
Le défi
- Étant donné une date de l'année 2000 à l'année 100000, retrouvez le jour de la semaine sous ce nouveau calendrier.
- Tout format d'entrée et de sortie est autorisé tant que vous spécifiez clairement les formats que vous utilisez.
- C'est du golf de code alors essayez de rendre vos solutions aussi golfiques que possible!
Cas de test
"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
Les suggestions et commentaires sur le défi sont les bienvenus. Bonne chance et bon golf!
Réponses:
C (gcc) , 60 octets
Essayez-le en ligne!
Modification simple de la méthode de Sakamoto . Prend les entrées sous forme d'arguments entiers dans l'ordre
month, day, year
et affiche le numéro du jour (indexé 0 le dimanche).la source
"-bed=pen+mad."
pièce?char
représente toujours un nombre, donc vous pouvez le fairemod 7
directement.Wolfram Language (Mathematica) ,
575553 octetsEssayez-le en ligne!
Prend trois entrées: l'année, le mois et le jour, dans cet ordre. Par exemple, si vous enregistrez la fonction ci-dessus sous
fun
,fun[2048,2,28]
vous indique alors le jour de la semaine du 28 février 2048.Comment ça marche
La formule
m=#~Mod~128;6+Mod[(9#-m)/8-6Clip@m,28]
convertit l'année en une année équivalente (une année avec exactement les mêmes jours de la semaine) entre 6 AD et 33 AD. Pour ce faire, on soustrait un offset puis on prend l'année mod 28; mais la compensation change tous les 128 ans, et pour les années divisibles par 128, nous devons procéder à un nouvel ajustement car l'année équivalente ne devrait pas être une année bissextile.Quoi qu'il en soit, une fois cela fait, nous recherchons le mois et le jour de cette année équivalente à l'aide de la fonction intégrée
DayName
.la source
Python 2 , 67 octets
Essayez-le en ligne!
int("..."[m])
peut être remplacé parord("-bed=pen+mad."[m])
.la source
JavaScript,
6559 octetsUtilise la méthode de Sakamoto. Donne0=Sunday, 1=Monday, 2=Tuesday...
-2 octets grâce à Misha Lavrov
-4 octets grâce à Arnauld
la source
~~y
peut être changé eny
. Vous n'obtiendrez pas une fraction d'année en entrée, non? Mais j'avoue que je ne parle pas couramment JavaScript.+y+(y>>2)-(y>>7)
?En fait , 37 octets
Il s'agit d'un portage de la modification de notjagan de l'algorithme de Sakamoto , mais avec quelques astuces basées sur la pile comme décrit ci-dessous. Le format d'entrée est
day, year, month
. Le format de sortie est0-indexed with Sunday as 0
. Suggestions de golf bienvenues! Essayez-le en ligne!Explication
la source
Gelée ,
32313028 octetsUn autre port de la modification par notjagan de l'algorithme de Sakamoto mais avec un nombre de base 250 à la place de
032503514624
(pas besoin d'extra0
car Jelly est indexé 1). Le format d'entrée estmonth, year, day
. Le format de sortie est0-based with Sunday as 0
. Les suggestions de golf sont les bienvenues car la façon dont les liens étaient difficiles à organiser et peut encore être golfable. Essayez-le en ligne!Modifier: -1 octet en utilisant le décalage de bits au lieu de la division entière. -1 octet de réarrangement du début et du format d'entrée. -2 octets grâce à Erik l'Outgolfer et le caird coinheringaahing.
Explication
la source