1 points par GN⁺ 2024-05-26 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2024-05-26
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 forme 144 / 025 / 036 / 146, et si nécessaire, on peut aussi les recalculer à partir du principe.

    • 144 : Jan, Feb, Mar signifie par exemple Jan=1, Feb=4, Mar=4.
    • Cette explication, j’ai pu la mémoriser immédiatement. Mais en essayant avec le 7 février 2032, j’obtenais 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.
    • Combiner mémorisation et calcul est utile. 0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4 sont 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 avec Magic(n)=2n+Offset(n)+c.
      Dans les nombres magiques 1 4 4 0 2 5 0 3 6 1 4 6, on a c=-1, et pour décembre cela donne 2×12+4-1 ≡ 6 (mod 7). À l’inverse, à partir des nombres magiques mémorisés, on peut aussi reconstituer les décalages en calculant Magic(n)-2n-c, en se souvenant seulement que la plage des décalages est [-1,4].
    • La méthode de Lewis Carroll me paraît beaucoup plus simple et rapide ; je ne vois pas bien quel avantage celle-ci a par rapport à elle, et sa complexité semble avoir pas mal augmenté.
  • 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é.

    • Le fait que l’année fiscale britannique commence encore le 6 avril est aussi lié au passage du calendrier julien au calendrier grégorien il y a près de 300 ans : https://theconversation.com/why-the-uk-tax-year-begins-on-april-6-its-a-very-strange-tale-57247
      Je me demande si d’autres pays conservent beaucoup de ces vieux correctifs hérités du passé.
    • La page Wikipédia de la méthode de Carroll, à l’article Lewis Carroll's method, explique aussi, à propos de l’exemple du 23 février 1676, que les dates anglaises antérieures à 1752 étaient indiquées en Old Style, avec le 25 mars comme premier jour de l’année.
      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.
    • L’utilitaire cal de 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#L1079
    • En exécutant cal 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
    • Rome utilisait aussi une année basée sur mars. C’est pourquoi février a moins de jours, et pourquoi October signifie littéralement huitième mois.
  • 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 obtient 10-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.

    • January semble être une valeur fixe 0, February et March des valeurs fixes 3, et December aussi une valeur fixe donnée directement dans l’article.
      La logique (10-rang)+nombre de jours mod 7 ne 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 utiliser item+days mod 7 à partir du mois précédent, mais l’endroit où l’article justifie cette interprétation reste obscur.
    • J’ai aussi buté sur ce passage, et l’interprétation la plus plausible me paraît être la suivante. Le numéro d’élément de chaque mois peut se calculer en ajoutant au numéro d’élément du mois précédent le nombre de jours du mois précédent, puis en prenant le résultat modulo 7.
      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, y n’est pas compté comme une voyelle. Sinon, il est peut-être simplement plus facile de les mémoriser.
    • J’ai rencontré le même problème et essayé plusieurs réinterprétations de la formule, mais rien ne m’a aidé.
  • 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, donc 2+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, et 33 mod 7 = 5, ce qui donne vendredi.

    • J’espérais que la partie où l’élément du mois devient May=1 serait détaillée. Même avec l’explication, je n’y comprends vraiment rien.
  • À 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.

    • Les échecs ont connu la même chose. Prenez le coup où les Blancs, au premier coup, déplacent le cavalier le plus proche du roi blanc vers la case située, depuis sa position de départ, deux cases en avant et une case à gauche : du XVIIe siècle à aujourd’hui, la notation de ce coup n’a cessé de raccourcir.
      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 ♘f3 si l’on veut éviter les noms de pièces propres à chaque langue : https://www.knightschessclub.org/the_history_of_notation.html
  • Le 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.

    • Les personnes auxquelles il se comparait étaient sans doute d’autres professeurs qui enseignaient les mathématiques à Oxbridge.
  • 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.

    • Inclure 1752 est délicat. Dans l’Empire britannique, lors de l’adoption du calendrier grégorien, les dates du 3 au 13 septembre ont été sautées, ce qui a fait de cette année la seule à ne compter que 355 jours.
      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.