- Lewis Carroll schlug in einem am 31. März 1887 an Nature gesendeten Brief ein Verfahren vor, mit dem sich der Wochentag eines beliebigen Datums im Kopf bestimmen lässt
- Dabei wird das Datum in die vier Elemente Jahrhundert, Jahr, Monat und Tag zerlegt, addiert und bei jedem Zwischenschritt nur der Rest bei Division durch 7 beibehalten, um die Komplexität zu verringern
- Carroll sagte, dass er selbst im Durchschnitt etwa 20 Sekunden brauche, und meinte, ein schneller Rechner könne es auch in weniger als 15 Sekunden schaffen
- Die Regeln enthalten den Unterschied zwischen Old Style und New Style, eine Schaltjahrkorrektur sowie Monatswerte; das Endergebnis wird als 0=Sunday, 1=Monday usw. interpretiert
- In den Beispielrechnungen ergibt sich für den 18. September 1783 Thursday, für den 23. Februar 1676 nach Schaltjahrkorrektur Wednesday
Das Datum in vier Elemente zerlegen
- In einem am 31. März 1887 an Nature gesendeten Brief stellte Lewis Carroll eine Methode vor, mit der sich der Wochentag eines bestimmten Datums per Kopfrechnung bestimmen lässt
- Das eingegebene Datum wird in vier Teile aufgeteilt
- Century-Item: die ersten beiden Ziffern des Jahres
- Year-Item: das Jahr innerhalb des Jahrhunderts
- Month-Item: der Monat
- Day-Item: der Tag des Monats
- Jedes Element wird berechnet und zur laufenden Summe addiert; wenn ein Element oder die Summe 7 überschreitet, wird nur der Rest bei Division durch 7 beibehalten
Rechenregeln für die einzelnen Elemente
-
Century-Item
- Old Style gilt als am 2. September 1752 beendet; der Jahrhundertwert wird von 18 abgezogen
- New Style beginnt am 14. September 1752; dabei wird der Rest des Jahrhundertwerts bei Division durch 4 von 3 abgezogen und anschließend mit 2 multipliziert
- Für das Century-Item von 1811 werden beispielsweise die ersten beiden Ziffern 18 verwendet
-
Year-Item
- Zum Jahr innerhalb des Jahrhunderts werden die Anzahl der Zwölfer, der Rest sowie die Anzahl der Vierer in diesem Rest addiert
-
Month-Item
- Beginnt oder endet der Monatsname mit einem Vokal, wird seine Position im Jahr von 10 abgezogen
- Addiert man dazu die Anzahl der Tage des Monats, erhält man den Wert des folgenden Monats
- Nach Division durch 7 werden folgende Monatswerte verwendet
- 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
- Verwendet wird einfach der Tag des Monats selbst
-
Schaltjahrkorrektur
- Fällt das Datum auf January oder February eines Schaltjahres, wird von der Endsumme 1 abgezogen
- Ist die Summe 0, wird zunächst 7 addiert und danach 1 abgezogen
- Ein Schaltjahr ist ein durch 4 teilbares Jahr; bei Jahrhundertjahren im New Style gibt es jedoch eine Ausnahme, wenn die Jahrhundertszahl nicht durch 4 teilbar ist
- 1800 ist im New Style ein Beispiel für diese Ausnahme
- Das Endergebnis wird als Wochentagsnummer interpretiert: 0 steht für Sunday, 1 für Monday und danach fortlaufend entsprechend
Rechenbeispiele und Quelle
- Das Ergebnis für den 18. September 1783 ist Thursday
- Der 23. Februar 1676 ergibt nach Schaltjahrkorrektur Wednesday
- Überliefert ist dieses Verfahren durch Edward Wakelings Rediscovered Lewis Carroll Puzzles, 1995
1 Kommentare
Hacker-News-Kommentare
Diese Methode ist der, die ich benutze, sehr ähnlich, und nachdem ich mit Art Benjamin gesprochen habe, stellte sich heraus, dass er ebenfalls eine ähnliche Methode verwendete. In 10–15 Sekunden geht das leicht, aber es erfordert Übung, sehr wenig Auswendiglernen und etwas Kopfrechnen
Ich benutze sie auch oft, um das Gefühl dafür nicht zu verlieren, und wenn man sie einmal beherrscht, ist sie überraschend nützlich, sodass man sie weiter benutzt. J. H. Conway verwendete die andere Technik, die Doomsday rule, und für die Berechnung von Daten in diesem Jahr bin ich darauf umgestiegen. Sie ist schneller und einfacher, aber den „Doomsday“ anderer Jahre zu finden ist schwieriger, daher kehre ich dann zur ursprünglichen Methode zurück
Zum Beispiel sind beim 2024/05/24 seit 2012 zwölf Jahre vergangen, es gab 3 Schaltjahre, die magische Zahl für Mai ist 2, und wenn man den Tag 24 addiert und mod 7 nimmt, ergibt
(12+3+2+24)=6, also Freitag. Die magischen Zahlen der einzelnen Monate kann man sich als144 / 025 / 036 / 146merken, und bei Bedarf lassen sie sich auch aus dem Prinzip herleiten144 : Jan, Feb, Markann man so verstehen, dass es Jan=1, Feb=4, Mar=4 bedeutet20+5+4+7 ≡ 1und ich erwartete Sonntag, tatsächlich war es aber Samstag, weil 2032 ein Schaltjahr ist und das Datum vor dem 29. Februar liegtIn solchen Fällen, also vor oder bis zum 29. Februar eines Schaltjahres, muss man 1 abziehen
0, 1, -1, 0, 0, 1, 1, 2, 3, 3, 4, 4ist der Offset zwischen dem Tag des Jahres für den 1. jedes Monats und dem Tag des Jahres, den man erhielte, wenn alle vorherigen Monate 30 Tage hättenWenn zum Beispiel die ersten 11 Monate alle 30 Tage hätten, dann wäre der 25. Dezember der 355. Tag, also
30×11+25=355, und wenn man den 12. Offset 4 addiert, erhält man den tatsächlichen 359. Tag. Diese Offset-Folge ist leicht zu merken, und wenn man sie einmal kennt, erhält man die magischen Zahlen der Monate mitMagic(n)=2n+Offset(n)+cBei den magischen Zahlen
1 4 4 0 2 5 0 3 6 1 4 6istc=-1, und für Dezember ergibt sich2×12+4-1 ≡ 6 (mod 7). Umgekehrt kann man aus den gemerkten magischen Zahlen auch die Offsets wiederherstellen, indem manMagic(n)-2n-cberechnet; man muss sich nur merken, dass der Offset-Bereich[-1,4]istBeim Lesen des Artikels habe ich angefangen, den Unterschied zwischen Old-Style-/New-Style-Daten und die Ereignisse von 1752 nachzuschlagen. Laut dem Calendar (New Style) Act 1750 begann das gesetzliche Jahr in England bis ins 18. Jahrhundert hinein über Jahrhunderte am 25. März, also am Lady Day
Daher folgte auf den 24. März 1707 zum Beispiel direkt der 25. März 1708, und auf den 31. Dezember 1708 folgte immer noch der 1. Januar 1708; 1709 war also noch fast drei Monate entfernt. Gut, dass das geändert wurde
Ich frage mich, ob es in anderen Ländern auch noch viele solche historischen Altlasten gibt
Carrolls Methode setzt jedoch den 1. Januar als Jahresanfang voraus und kommt deshalb nicht auf die richtige Antwort „Friday“. Interessanterweise haben diejenigen, die Carrolls Methode neu veröffentlicht haben, diesen Fehler nicht angesprochen, und auch der verlinkte Artikel hat denselben Mangel
calenthält eine Sonderbehandlung für September 1752: https://github.com/util-linux/util-linux/blob/9f15d2de8117732845b2e891a2d24d987ee4e3ed/misc-utils/cal.c#L1079cal 1752ausgeführt habe, fehlten im September-Kalender die Daten zwischen Mittwoch, dem 2., und Donnerstag, dem 14.Umstritten zwar, aber es gibt auch die Erklärung, dass die gregorianische Umstellung der Ursprung des Aprilscherzes sei: https://en.wikipedia.org/wiki/April_Fools%27_Day, https://en.wikipedia.org/wiki/Gregorian_calendar
Der Berechnungsweg für die Monatseinträge im Artikel ist schwer nachzuvollziehen. Der Artikel erklärt, dass man, wenn ein Monat mit einem Vokal beginnt oder endet, seine Position im Jahr von 10 abzieht und dann die Anzahl der Tage dieses Monats addiert, um den Eintrag des nächsten Monats zu erhalten.
Aber der Monat vor Januar ist Dezember, und der beginnt oder endet nicht mit einem Vokal, also dürfte man nichts von 10 abziehen und es müsste
12+31 ≡ 1herauskommen, während im Artikel 0 steht. Für Februar endet January auf einen Vokal, also müsste10-1+31 ≡ 4gelten, aber im Artikel steht 3, und auch für März passt die Rechnung auf Basis von February nicht.April und Mai stimmen, aber Juni wieder nicht, daher weiß ich nicht, was ich falsch verstanden habe.
Die Logik
(10-Position)+Tage mod 7scheint auf Basis des Vormonats nur für jeden zweiten Monat wie May, July, September und November zu funktionieren, und die Vokalregel wirkt eher wie eine Merkregel, um sich zu merken, auf welche Monate man diese Rechnung anwenden kann. Für die übrigen Monate scheint manEintrag+Tage mod 7des Vormonats zu verwenden, aber aus welcher Stelle des Artikels sich diese Deutung ergibt, ist unklar.Für Januar gibt es keinen Vormonat, also setzt man alles auf 0 und das Ergebnis ebenfalls auf 0. Man muss nicht jedes Mal ab Januar bis zum gewünschten Monat durchrechnen, denn für Monate, die mit einem Vokal beginnen oder enden, kann man die Abkürzung
10-Monatsnummerverwenden. Dabei zähltynicht als Vokal. Oder man merkt es sich einfach auswendig; das ist womöglich leichter.Carrolls Algorithmus hat sich im Lauf der Zeit weiterentwickelt. Der First Sunday Doomsday Algorithm(https://firstsundaydoomsday.blogspot.com/2009/12/quick-start-guide.html) enthält Verbesserungen, die bis 2023 veröffentlicht wurden, und umfasst auch die „odd+11“-Regel von Fong & Walters zur Berechnung des Jahrescodes: https://arxiv.org/abs/1010.0765
Ich habe einen Artikel dazu geschrieben, weil ich das für eine intuitivere Methode halte, das zu berechnen: https://gcanyon.wordpress.com/2013/04/09/a-better-way-to-calculate-the-day-of-the-week/
Es ist wirklich faszinierend, Art Benjamin in seinem TED-Vortrag dabei zuzusehen. Wenn man genau hinschaut, sieht man, dass er die Zwischenschritte mit Handbewegungen verfolgt.
Wenn man es einmal verstanden hat, wirkt es selbstverständlich, ist aber äußerst clever. Auf https://www.ted.com/talks/arthur_benjamin_a_performance_of_mathemagic geht es bei 7:47 los.
So berechnet man mit der Lewis-Carroll-Methode das heutige Datum, also den 24. Mai 2024. Der Jahrhundertseintrag ist für das 20. Jahrhundert
20/4=5, Rest 0,3-0=3,3×2=6.Der Jahreseintrag ist
24/12=2, Rest 0, die Anzahl der darin enthaltenen Vierer ist 0, also2+0+0=2. Der Monatseintrag ist laut Artikel für May gleich 1, und der Tageseintrag ist 24. Addiert ergibt das6+2+1+24=33, und33 mod 7 = 5, also Freitag.Den Leuten, die sagen, Notation sei nicht wichtig, würde ich gern sagen, dass die Mathematik früher komplett so aussah, bevor man bessere neue Notationen hatte.
Man könnte fast sagen, dass es in der Mathematik kaum etwas Wichtigeres als Notation gibt, und in der Informatik ist es genauso. Deshalb sind Lisp-artige Sprachen eine so offensichtliche Wahl, wenn Variablen explizit sind.
Anfang des 17. Jahrhunderts hieß das „The white king commands his owne knight into the third house before his owne bishop.”, Mitte des 18. Jahrhunderts
K. knight to His Bishop's 3d., Anfang des 19. JahrhundertsK.Kt. to B.third sq., um 1890KKt-B3, Mitte des 20. JahrhundertsN-KB3, und heuteNf3oder, wenn man sprachabhängige Figurenbezeichnungen vermeiden will,♘f3: https://www.knightschessclub.org/the_history_of_notation.htmlWenn er es in weniger als 20 Sekunden geschafft hat, kann man das durchaus beeindruckend nennen. Er selbst hielt sich nicht für einen Schnellrechner.
Ich habe ein Python-Skript zur Wochentagsberechnung geschrieben; wenn man
2024-05-24eingibt, kommt Friday heraus. Es addiert Jahrhundertseintrag, Jahreseintrag, ein Array von Monatseinträgen und den Tageseintrag und wendet für Schaltjahre in Januar und Februar eine Korrektur an.Für Daten vor dem 14. September 1752 habe ich es so umgesetzt, dass ein gesonderter Jahrhundertseintrag verwendet wird.
Diese ausgelassenen Daten wurden weltweit nicht einheitlich übernommen, und weil der Zeitpunkt je nach Land und Religion der aufzeichnenden Person unterschiedlich war, sorgen sie in historischen Aufzeichnungen bis heute für Probleme.