Algoritmus na výpočet dňa v týždni

V tomto článku je opísaný algoritmus na výpočet dňa v týždni pre ľubovoľný dátum.

mod a div 
a mod b (a modulo b) označuje zvyšok, ktorý zostane, keď a delíme b. Pre výpočet dňa v týždni je dôležitý zvyšok modulo 7.
Napríklad: 17 mod 7 = 3, lebo 17 / 7 je 2, zvyšok 3 
Celočíselný výsledok delenia (v hornom príklade 2) sa označuje a div b. Pre výpočet dňa v týždni je potrebné div 4.
Napríklad: 17 div 4 = 4

Výpočet 
Pre výpočet je potrebných nasledujúcich päť cifier:

Cifra dňa
Cifra dňa je deň v mesiaci mod 7.

Cifra mesiaca 
Cifra mesiaca (ktorú si treba zapamätať):
Január = 0, Február = 3, Marec = 3, Apríl = 6, Máj = 1, Jún = 4, Júl = 6, August = 2, September = 5, Október = 0, November = 3 a December = 5.
 
Január je nula. Ďalšie cifry sa dajú dopočítať zvyškom predchádzajúceho mesiaca mod 7:

Január má 31 dní a 31 mod 7 = 3, teda Február = 3 + 0 = 3. 
Február má 28 dní a 28 mod 7 = 0 a pre Marec túto 0 pripočítame ku 3 Februára a ako výsledok dostaneme opäť 3. 
Marec má 31 dní, 31 mod 7 = 3 a 3 + 3 = 6, teda Apríl = 6. 
Apríl má 30 dní, 30 mod 7 = 2, 6 + 2 = 8 a 8 mod 7 = 1, teda Máj = 1 atď. 

Zabudnuté čísla sa teda dajú dopočítať.

Cifra roku 
Zoberieme posledné dve cifry roku. Ku tomuto číslu pripočítame celočíselný výsledok delenia tohto čísla štyrmi. Určíme tento súčet modulo 7. Ak je rok ABCD, vypočítame teda:

(CD + (CD div 4)) mod 7. 

Napr.: 

Rok: 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Cifra: 0 1 2 3 5 6 0 1 3 4 5 6 1 2 3 4 6 0 1 2 4 5 6 0 2 3 4 5 0 

Ako vidíme, počíta sa stále o 1 ďalej, v priestupných rokoch o 2, po 6 sa pokracuje znova s 0. Tento cyklus sa opakuje každých 28 rokov, rok 1928 bol (keď sa dívame na dni v týždni) teda taký istý ako rok 1956 a rok 1984.

Cifra storočia 
Cifra storočia sa vypočíta formulkou : 
(AB mod 4 - 3) * (-2)

Je to 0 pre všetky roky, ktoré začínajú s 19, 23, 27. 
Je to 2 pre všetky roky, ktoré začínajú s 18, 22, 26. 
Je to 4 pre všetky roky, ktoré začínajú s 17, 21, 25. 
Je to 6 pre všetky roky, ktoré začínajú s 16, 20, 24.

Cyklus 400 rokov v Gregoriánskom kalendári má 146097 dní a ti sú deliteľné 7. Dni v týždni sa teda opakujú  každých 400 rokov, rok 2004 má napr. tie isté dni v týždni ako 1604, 2404, 2804 atď.

Konečná cifra a oprava priestupného roku 
Teraz všetky cifry sčítame a vypočítame tento súčet mod 7.
Doteraz sme pripočítali priestupný deň celému roku, výpočet je teda správny až od 1.3. Ak je dátum v Januári alebo Februári musíme teda 1 odpočítať od konečnej cifry (alebo 6 pripočítať ku konečnej cifre).

Podľa konečnej cifry teraz rozhodneme na ktorý deň hľadaný dátum padne resp. padol: 
0 = Nedeľa, 1 = Pondelok, 2 = Utorok, 3 = Streda, 4 = Štvrtok, 5 = Piatok, 6 = Sobota

Príklady 
14. Júl 1789

1) 14 mod 7 = 0 
2) Júl = 6 
3) (89 + (89 div 4)) mod 7 = (89 + 22) mod 7 = 111 mod 7 = 6 
4) (17 mod 4 - 3) * (-2) = (1 - 3) * (-2) = (-2) * (-2) = 4 
5) (0 + 6 + 4 + 6) mod 7 = 2, žiadna oprava  

Bastila bola dobytá v utorok.

Externé odkazy
Počítadlo na výpočet dní podľa dátumu

Algoritmy
Kalendáre