Doomsday algorithm

Czym jest Doomsday?

Algorytm Doomsday pozwala na określenie dnia tygodnia dla dowolnie podanej daty. Dla całego algorytmu, Conway opracował różne mnemotechniki mające na celu pomóc zapamiętać najważniejsze informacje potrzebne do szybkiego i sprawnego korzystania z algorytmu w pamięci. Tylko czym jest tytułowy doomsday?

Wszytsko opiera się na idei, która zakłada, że istnieje kilka kluczowych dat w kalendarzu, które dzielą ten sam dzień tygodnia. Ułatwia to obliczanie pozostałych dni tygodnia dla reszty dat. Jest to najważniejsze założenie całego działania algorytmu. Te daty Conway nazwał "Doomsdays" (ang. Dzień Sądu Ostatecznego). Oto one:

Zacznijmy od kilku wyjątków:

Pozostałe miesiące wyznacza się pewną regułą:

Miesiąc Doomsday Mnemotechnika
Styczeń 3/4 w przestępny "3 years of 3, then 4 the 4th year"
Luty 28/29 w przestępny "The last day of February"
Marzec 0/14 The day before the 1st is "0th". Also Pi day.
Kwiecień 4 4 / 4
Maj 9 "I work 9 to 5"
Czerwiec 6 6 / 6
Lipiec 11 "7-Eleven"
Sierpień 8 8 / 8
Wrzesień 5 "I work 9 to 5"
Październik 10 10 / 10
Listopad 7 "7-Eleven"
Grudzień 12 12 / 12
Dzień tygodnia Cyfra Mnemotechnika
Sunday - Niedziela 0 Noneday
Monday - Poniedziałek 1 Oneday
Tuesday - Wtorek 2 Twosday
Wednesday - Środa 3 Treblesday
Thursday - Czwartek 4 Foursday
Friday - Piątek 5 Fiveday
Saturday - Sobota 6 Six-a-day
Stulecie Anchor day
1800 5 (Piątek)
1900 3 (Środa)
2000 2 (Wtorek)
2100 0 (Niedziela)

Dni tygodnia jako cyfry

Aby ułatwić działania na datach, Conway radził aby potraktować je jako liczby. Zaczynając od niedzieli jako 0, pozostałe dni numerujemy po koleji.

Anchor days

Pierwszą liczbą potrzebną do określenia doomsday dla konkretnego roku jest tzw. anchor day (ang. dzień zaczepienia). Jest on specyficzny dla stulecia, w którym znajduje się data. Dzięki temu, że kalendarz gregoriański zapętla się co 400 lat, do zapamiętania są tylko 4 anchor days.

Lata przestępne

Tutaj sprawa jest całkiem prosta. Rok jest przestępny, gdy:
Rok jest podzielny przez 4, ale nie przez 100
ALBO
Rok jest podzielny przez 400

Czyli jak to wszystko policzyć?

Dzięki całej tej wiedzy, będziesz w stanie wyliczyć dzień tygodnia przypadający we wszystkie doomsdays dla wybranego roku. W całym procesie będzie trzeba zapamiętać kilka liczb, dlatego Conway proponował korzystać z liczenia na palcach:

  1. Anchor day
  2. Ile razy 12 mieści się w ostatnich dwóch cyfrach roku?
  3. Reszta z dzielenia ostatnich dwóch cyfr roku przez 12.
  4. Ile razy 4 mieści się w punkcie 3?
  5. Suma wszystkich liczb

Teraz wystarczy wyciągnąć wszystkie 7 z sumy, i mamy liczbę, którą możemy zamienić na dzień tygodnia.
Wiedząc już, jaki dzień tygodnia przypada we wszystkie doomsdays, możemy łatwo wyliczyć dzień tygodnia dla interesującej nas daty.
Możesz teraz się sprawdzić!



Ciekawostki matematyczne Johna Conwaya © Bartłomiej Starosta