- Dans une lettre envoyée à Nature le 31 mars 1887, Lewis Carroll propose une procédure pour calculer mentalement le jour de la semaine d’une date arbitraire
- Il décompose la date en quatre éléments — siècle, année, mois, jour — qu’il additionne, en ne conservant à chaque étape que le reste modulo 7 afin de réduire la complexité du calcul
- Carroll indique qu’il lui faut lui-même en moyenne environ 20 secondes, et estime qu’un calculateur rapide pourrait y parvenir en moins de 15 secondes
- Les règles incluent la différence entre l’Old Style et le New Style, la correction des années bissextiles et une valeur attribuée à chaque mois ; le résultat final s’interprète comme 0=Sunday, 1=Monday, etc.
- Dans les exemples de calcul, le 18 septembre 1783 tombe un Thursday, et le 23 février 1676, après correction bissextile, un Wednesday
Méthode de division de la date en quatre éléments
- Dans une lettre envoyée à Nature le 31 mars 1887, Lewis Carroll présente une méthode de calcul mental pour trouver le jour de la semaine d’une date donnée
- La date d’entrée est divisée en quatre parties
- Century-Item : les deux premiers chiffres de l’année
- Year-Item : l’année à l’intérieur du siècle
- Month-Item : le mois
- Day-Item : le jour du mois
- On calcule chaque élément et on l’ajoute à la somme cumulée ; si un élément ou la somme dépasse 7, on ne conserve que le reste après division par 7
Règles de calcul par élément
-
Century-Item
- Pour l’Old Style, on considère qu’il se termine le 2 septembre 1752, et on soustrait la valeur du siècle à 18
- Pour le New Style, on considère qu’il commence le 14 septembre 1752 ; on prend le reste de la valeur du siècle modulo 4, on le soustrait à 3, puis on multiplie par 2
- Par exemple, pour le Century-Item de 1811, on utilise les deux premiers chiffres, 18
-
Year-Item
- On additionne le nombre de douzaines contenues dans l’année à l’intérieur du siècle, le reste, puis le nombre de groupes de 4 contenus dans ce reste
-
Month-Item
- Si le nom du mois commence ou se termine par une voyelle, on soustrait son rang dans l’année à 10
- En ajoutant à cela le nombre de jours du mois, on obtient la valeur de l’élément du mois suivant
- Les valeurs mensuelles à utiliser après division par 7 sont les suivantes
- January 0, February 3, March 3, April 6, May 1, June 4
- July 6, August 2, September 5, October 0, November 3, December 5
-
Day-Item
- On utilise simplement le jour du mois lui-même
-
Correction bissextile
- Si la date tombe en January ou February d’une année bissextile, on soustrait 1 au total final
- Si le total vaut 0, on ajoute d’abord 7 avant de soustraire 1
- Une année bissextile est une année divisible par 4, mais pour les années séculaires du New Style, il existe une exception si le numéro du siècle n’est pas divisible par 4
- 1800 est donné comme exemple de cette exception dans le New Style
- Le résultat final s’interprète comme un numéro de jour de la semaine : 0 correspond à Sunday, 1 à Monday, et ainsi de suite
Exemples de calcul et source
- Le résultat du calcul pour le 18 septembre 1783 est Thursday
- Le 23 février 1676, après correction bissextile, tombe un Wednesday
- Cette procédure est transmise par Edward Wakeling dans Rediscovered Lewis Carroll Puzzles, 1995
1 commentaires
Commentaires Hacker News
Cette méthode ressemble beaucoup à celle que j’utilise, et après en avoir discuté avec Art Benjamin, il s’avère qu’il utilisait une méthode similaire. Le faire en 10 à 15 secondes est facile, mais cela demande de l’entraînement, très peu de mémorisation et un peu de calcul mental.
Je l’utilise souvent aussi pour garder la main, et une fois qu’on l’a apprise, elle se révèle étonnamment utile, donc on continue à s’en servir. J. H. Conway utilisait une autre technique, la règle du Doomsday, et pour calculer des dates de l’année en cours, je suis passé à celle-ci. Elle est plus rapide et plus simple, mais trouver le « Doomsday » d’autres années est plus difficile, donc dans ce cas je reviens à ma méthode initiale.
Par exemple, pour 2024/05/24, on additionne les 12 années depuis 2012, les 3 années bissextiles, le nombre magique de mai 2 et le jour 24, puis on prend le tout modulo 7 :
(12+3+2+24)=6, ce qui donne vendredi. Les nombres magiques de chaque mois peuvent se retenir sous la forme144 / 025 / 036 / 146, et si nécessaire, on peut aussi les recalculer à partir du principe.144 : Jan, Feb, Marsignifie par exemple Jan=1, Feb=4, Mar=4.20+5+4+7 ≡ 1, donc je m’attendais à un dimanche, alors que c’était en réalité un samedi, parce que 2032 est une année bissextile et que la date est antérieure au 29 février.Dans ce cas, c’est-à-dire avant le 29 février d’une année bissextile, ou jusqu’à ce jour inclus, il faut soustraire 1.
0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4sont les décalages entre le numéro du jour dans l’année du 1er de chaque mois et le numéro du jour dans l’année si l’on supposait que tous les mois précédents avaient 30 jours.Par exemple, si les 11 premiers mois avaient tous 30 jours, le 25 décembre serait le
30×11+25=355e jour ; en ajoutant le 12e décalage, 4, on obtient le 359e jour réel. Cette suite de décalages est facile à retenir, et une fois mémorisée, les nombres magiques par mois s’obtiennent avecMagic(n)=2n+Offset(n)+c.Dans les nombres magiques
1 4 4 0 2 5 0 3 6 1 4 6, on ac=-1, et pour décembre cela donne2×12+4-1 ≡ 6 (mod 7). À l’inverse, à partir des nombres magiques mémorisés, on peut aussi reconstituer les décalages en calculantMagic(n)-2n-c, en se souvenant seulement que la plage des décalages est[-1,4].En lisant l’article, je me suis retrouvé à chercher la différence entre les dates Old Style/New Style et ce qui s’est passé en 1752. D’après le Calendar (New Style) Act 1750, jusqu’au XVIIIe siècle, l’année légale en Angleterre commençait depuis des siècles le 25 mars, c’est-à-dire à Lady Day.
Ainsi, par exemple, le lendemain du 24 mars 1707 était le 25 mars 1708, et le lendemain du 31 décembre 1708 était encore le 1er janvier 1708 ; 1709 n’arrivait que presque trois mois plus tard. Heureusement que cela a changé.
Je me demande si d’autres pays conservent beaucoup de ces vieux correctifs hérités du passé.
Mais la méthode de Carroll suppose que le 1er janvier est le premier jour de l’année, et ne parvient donc pas à la bonne réponse, « Friday ». Fait intéressant, les personnes qui ont republié la méthode de Carroll n’ont pas signalé cette erreur, et l’article lié présente le même défaut.
calde Linux possède un traitement spécial qui reconnaît septembre 1752 : https://github.com/util-linux/util-linux/blob/9f15d2de8117732845b2e891a2d24d987ee4e3ed/misc-utils/cal.c#L1079cal 1752, on voit que, dans le calendrier de septembre, les dates entre le mercredi 2 et le jeudi 14 manquent.Même si c’est discuté, il existe aussi une explication selon laquelle le passage au calendrier grégorien serait à l’origine du poisson d’avril : https://en.wikipedia.org/wiki/April_Fools%27_Day, https://en.wikipedia.org/wiki/Gregorian_calendar
La méthode de calcul de l’élément du mois dans l’article est difficile à suivre. L’article explique que, pour un mois qui commence ou se termine par une voyelle, on soustrait son rang dans l’année de 10, puis on y ajoute le nombre de jours du mois, ce qui donne l’élément du mois suivant.
Or décembre, le mois qui précède janvier, ne commence ni ne se termine par une voyelle, donc on ne devrait pas le soustraire de 10, et on devrait obtenir
12+31 ≡ 1, alors que l’article donne 0. Pour février aussi, comme January se termine par une voyelle, on obtient10-1+31 ≡ 4, mais l’article donne 3 ; et pour mars, le calcul à partir de February ne colle pas non plus.Avril et mai fonctionnent, mais juin ne fonctionne de nouveau pas, donc je ne vois pas ce que j’ai mal compris.
La logique
(10-rang)+nombre de jours mod 7ne marche, en prenant le mois précédent comme référence, que pour un mois sur deux comme May, July, September et November ; la règle des voyelles ressemble plutôt à un moyen mnémotechnique pour retenir à quels mois appliquer ce calcul. Pour les autres mois, on semble utiliseritem+days mod 7à partir du mois précédent, mais l’endroit où l’article justifie cette interprétation reste obscur.Pour janvier, comme il n’y a pas de mois précédent, on considère tout comme 0 et on laisse le résultat à 0. Inutile de recalculer à chaque fois depuis janvier jusqu’au mois voulu : pour les mois qui commencent ou se terminent par une voyelle, on peut utiliser le raccourci selon lequel le numéro d’élément du mois est
10-numéro du mois. Ici,yn’est pas compté comme une voyelle. Sinon, il est peut-être simplement plus facile de les mémoriser.L’algorithme de Carroll a évolué avec le temps. Le First Sunday Doomsday Algorithm (https://firstsundaydoomsday.blogspot.com/2009/12/quick-start-guide.html) inclut les améliorations publiées jusqu’en 2023, ainsi que la règle « odd+11 » de Fong & Walters pour calculer le code de l’année : https://arxiv.org/abs/1010.0765
J’ai écrit un article où je rassemble ce que je considère comme une manière plus intuitive de faire ce calcul : https://gcanyon.wordpress.com/2013/04/09/a-better-way-to-calculate-the-day-of-the-week/
La scène où Art Benjamin fait cela dans une conférence TED est vraiment fascinante. En regardant de près, on voit qu’il suit les calculs intermédiaires avec des gestes de la main.
Une fois qu’on le sait, ça paraît évident, mais c’est très astucieux. Ça commence à 7:47 sur https://www.ted.com/talks/arthur_benjamin_a_performance_of_mathemagic
Si l’on calcule aujourd’hui, c’est-à-dire le 24 mai 2024, avec la méthode de Lewis Carroll, cela donne ceci. L’élément du siècle, pour le XXe siècle, est
20/4=5, reste 0,3-0=3,3×2=6.L’élément de l’année est
24/12=2, reste 0, et le nombre de 4 qu’il contient est 0, donc2+0+0=2. L’élément du mois est May=1 dans l’article, et l’élément du jour est 24. En additionnant le tout,6+2+1+24=33, et33 mod 7 = 5, ce qui donne vendredi.À ceux qui disent que la notation n’a pas d’importance, j’ai envie de répondre que toutes les mathématiques avant l’apparition de meilleures notations ressemblaient à ça.
On pourrait presque dire qu’en mathématiques, il n’y a pas grand-chose de plus important que la notation, et c’est pareil en informatique. C’est aussi pour cette raison que les langages de la famille Lisp sont un choix évident lorsque les variables sont explicites.
Au début des années 1600, c’était « The white king commands his owne knight into the third house before his owne bishop. » ; au milieu des années 1700,
K. knight to His Bishop's 3d.; au début des années 1800,K.Kt. to B.third sq.; vers 1890,KKt-B3; au milieu du XXe siècle,N-KB3; et aujourd’hui,Nf3, ou♘f3si l’on veut éviter les noms de pièces propres à chaque langue : https://www.knightschessclub.org/the_history_of_notation.htmlLe faire en moins de 20 secondes mérite d’être qualifié d’impressionnant. Lui-même ne se considérait pas comme un calculateur rapide.
En écrivant un script Python pour calculer le jour de la semaine et en lui passant
2024-05-24, on obtient Friday. La méthode consiste à additionner l’élément du siècle, l’élément de l’année, un tableau des éléments de mois et l’élément du jour, puis à appliquer une correction d’année bissextile pour janvier et février.J’ai prévu un traitement séparé avec un autre élément de siècle pour les dates antérieures au 14 septembre 1752.
Ces dates disparues n’ont pas été supprimées uniformément dans le monde entier, et le moment de l’adoption variait selon les pays et la religion des auteurs des documents, ce qui en fait un problème récurrent dans les archives historiques.