Určení dne v týdnu - Determination of the day of the week

Algoritmus pro výpočet dne v týdnu pro libovolné datum může být prováděno s různými algoritmy . Kromě toho věčné kalendáře nevyžaduje výpočet ze strany uživatele, a jsou v podstatě vyhledávací tabulky. Typickou aplikací je vypočítat den v týdnu, ve kterém se někdo narodil nebo došlo ke konkrétní události.

Pojmy

V numerickém výpočtu jsou dny v týdnu reprezentovány jako čísla dne v týdnu. Pokud je pondělí prvním dnem týdne, mohou být dny kódovány 1 až 7, od pondělí do neděle, jak je uvedeno v ISO 8601 . Den označený číslem 7 lze také započítat jako 0 , a to pomocí aritmetického modulu 7, který vypočítá zbytek čísla po dělení číslem 7. Číslo 7 je tedy považováno za 0, 8 jako 1, 9 jako 2, 18. jako 4 a tak dále. Je -li neděle započítána jako den 1, pak je o 7 dní později (tj. Den 8) také neděle a den 18 je stejný jako den 4, což je středa, protože připadá na tři dny po neděli.

Standard pondělí úterý středa Čtvrtek pátek sobota Neděle Příklady použití
ISO 8601 1 2 3 4 5 6 7 %_ISODOWI%,%@ISODOWI []%( 4DOS ); DAYOFWEEK () ( HP Prime )
0 1 2 3 4 5 6
2 3 4 5 6 7 1 % NDAY OF WEEK% ( NetWare , DR-DOS ); %_DOWI%,%@DOWI []%( 4DOS )
1 2 3 4 5 6 0 Finanční kalkulačky HP

Základní přístup téměř všech metod pro výpočet dne v týdnu začíná od „kotevního data“: známého páru (například 1. ledna 1800 jako středy), který určuje počet dní mezi známým dnem a den, který se pokoušíte určit, a pomocí aritmetického modulo 7 najít nový numerický den v týdnu.

Jedním standardním přístupem je vyhledat (nebo vypočítat pomocí známého pravidla) hodnotu prvního dne týdne daného století, vyhledat (nebo vypočítat pomocí metody kongruence) úpravu za měsíc, vypočítat počet přestupných let od začátku století a poté je sečtěte spolu s počtem let od začátku století a číslem dne v měsíci. Nakonec člověk skončí s počítáním dnů, na které použije modul 7 k určení dne v týdnu data.

Některé metody nejprve provedou všechna přidávání a poté vyhodí sedmičky, zatímco jiné je vyhodí v každém kroku, jako v metodě Lewise Carrolla . Ať tak či onak je docela životaschopný: první je jednodušší pro kalkulačky a počítačové programy, druhý pro mentální výpočet (je docela možné provést všechny výpočty v hlavě s trochou praxe). Žádná z zde uvedených metod neprovádí kontroly rozsahu, takže nepřiměřená data přinesou chybné výsledky.

Odpovídající dny

Každý sedmý den v měsíci má stejný název jako předchozí:

Den
v měsíci
d
00 07 14 21 28 0
01 08 15 22 29 1
02 09 16 23 30 2
03 10 17 24 31 3
04 11 18 25 4
05 12 19 26 5
06 13 20 27 6

Odpovídající měsíce

„Odpovídající měsíce“ jsou měsíce v kalendářním roce, které začínají stejným dnem v týdnu. Například září a prosinec odpovídají, protože 1. září připadá na stejný den jako 1. prosinec (protože mezi oběma daty je přesně třináct 7denních týdnů). Měsíce mohou odpovídat pouze tehdy, je -li počet dní mezi jejich prvními dny dělitelný 7, nebo jinými slovy, pokud jsou jejich první dny od sebe celé týdny. Únor běžného roku například odpovídá březnu, protože únor má 28 dní, číslo dělitelné 7, 28 dní jsou přesně čtyři týdny. V přestupném roce leden a únor odpovídají různým měsícům než v běžném roce, protože přidání 29. února znamená, že každý následující měsíc začíná o den později.

Leden odpovídá říjnu v běžných letech a dubnu a červenci v přestupných letech. Únor odpovídá březnu a listopadu v běžných letech a srpnu v přestupných letech. Březen vždy odpovídá listopadu, duben vždy odpovídá červenci a září vždy odpovídá prosinci. Srpen neodpovídá žádnému jinému měsíci běžného roku. Říjen neodpovídá žádnému jinému měsíci v přestupném roce. Květen a červen nikdy neodpovídají žádnému jinému měsíci.

V níže uvedené tabulce měsíců mají odpovídající měsíce stejné číslo, což vyplývá přímo z definice.

Běžné roky Přestupné roky m
Leden říj Října 0
Smět Smět 1
Srpna Únor srpen 2
Únor březen listop Března 3
Června Června 4
Září prosinec Září prosinec 5
Duben červenec Leden duben červenec 6

Odpovídající roky

Existuje sedm možných dnů, kdy může rok začít, a přestupné roky změní den v týdnu po 29. únoru. To znamená, že existuje 14 konfigurací, které může mít jeden rok. Všechny konfigurace lze odkázat na dominantní písmeno , ale protože 29. února není přiřazeno žádné písmeno, přestupný rok má dvě dominantní písmena, jedno pro leden a únor a druhé (o krok zpět v abecedním pořadí) od března do Prosinec.

2021 je běžný rok začínající v pátek, což znamená, že odpovídá kalendářnímu roku 2010. První dva měsíce roku 2021 odpovídají prvním dvěma měsícům roku 2016. 2022 je běžný rok začínající v sobotu, což znamená, že odpovídá kalendářnímu roku 2011. Posledních deset měsíců roku 2022 odpovídá posledním deseti měsícům roku 2016. 2023 je běžný rok začínající v neděli, což znamená, že odpovídá kalendářnímu roku 2017. 2024 je přestupný rok, který začíná v pondělí, což znamená, že odpovídá kalendářnímu roku 1996. První dva měsíce roku 2024 odpovídají prvním dvěma měsícům roku 2018. Posledních deset měsíců roku 2024 odpovídá posledním deseti měsícům roku 2019.

Každý přestupný rok se opakuje jednou za 28 let a každý běžný rok se opakuje jednou za 6 let a dvakrát za 11 let. Například poslední výskyt přestupného roku začínající ve středu byl 2020 a další výskyt bude 2048. Stejně tak další běžné roky začínající v pátek budou 2027, 2038 a poté 2049. Obě tato tvrzení jsou pravdivá, pokud přestupný rok je vynechán, ale k tomu dojde až v roce 2100.

Podrobnosti viz tabulka níže.

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

Poznámky:

  • Černá znamená všechny měsíce společného roku
  • Červená znamená první 2 měsíce přestupného roku
  • Modrá znamená posledních 10 měsíců přestupného roku

Odpovídající století


Modul 700 z Julian Century
Gregoriánský způsob
400
Den
400: 1100 1800 ... 300: 1500 1900 ... slunce
300: 1000 1700 ... Po
200 0900 1600 ... 200: 1800 2200 ... Út
100 0800 1500 ... Středa
700: 1400 2100 ... 100: 1700 2100 ... Čtvrtek
600: 1300 2000 ...
500: 1200 1900 ... 000: 1600 2000 ... So

„Rok 000“ je v normální chronologii rok 1 př. N. L. (Který předchází roku 1 n. L.). V číslování astronomických let se rok 0 pohybuje mezi 1 př. N. L. A n. L. V proleptickém juliánském kalendáři (tj. V juliánském kalendáři, jaký by byl, kdyby byl od začátku správně provozován) začíná 1 př. N. L. Ve čtvrtek. V proleptickém gregoriánském kalendáři (tzv. Protože nebyl vytvořen až do roku 1582) začíná 1 př. N. L. V sobotu.

Tabulkové metody pro výpočet dne v týdnu

Kompletní tabulka: juliánský a gregoriánský kalendář

Pro Julianova data před rokem 1300 a po roce 1999 by měl být použit rok v tabulce, který se liší přesným násobkem 700 let. Pro gregoriánská data po roce 2299 by měl být použit rok v tabulce, který se liší přesným násobkem 400 let. Hodnoty „ r0 “ až „ r6 “ označují zbytek, když je hodnota Stovek vydělena 7, respektive 4, což udává, jak se série rozšiřuje v obou směrech. Julianské i gregoriánské hodnoty jsou pro pohodlí zobrazeny 1500-1999. Tučná čísla (např. 04 ) označují přestupný rok. Pokud rok končí 00 a jeho stovky jsou vyznačeny tučně, je to přestupný rok. 19 tedy znamená, že 1900 není přestupný rok gregoriánský ((ale 19 ve sloupci Julian znamená, že je přestupný rok juliánský, stejně jako všechny Julian x 00 let). 20 ukazuje, že rok 2000 je přestupný. Jan a Feb použijte pouze v přestupných letech.

Stovky let Zbývající číslice roku Měsíc D
o
W
#
Julian
(r ÷ 7)
Gregorián
(r ÷ 4)
r5 19 16 20 r0 00 06 17 23 28 34 45 51 56 62 73 79 84 90 Jan Října Sa 0
r4 18 15 19 r3 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96 Smět Su 1
r3 17
N/A
02 13 19 24 30 41 47 52 58 69 75 80 86 97 Února Srpna M 2
r2 16 18 22 r2 03 08 14 25 31 36 42 53 59 64 70 81 87 92 98 Února Mar listopad Tu 3
r1 15
N/A
  09 15 20 26   37 43 48 54   65 71 76 82   93 99 Června W 4
r0 14 17 21 r1 04 10 21 27 32 38 49 55 60 66 77 83 88 94 Září Prosince Th 5
r6 13
N/A
05 11 16 22 33 39 44 50 61 67 72 78 89 95 Jan Duben Jul F 6

Pro určení dne v týdnu (1. ledna 2000, sobota)

  • den v měsíci: 1 ~ 31 (1)
  • měsíc: (6)
  • rok: (0)
  • století mod 4 pro gregoriánský kalendář a mod 7 pro juliánský kalendář (0) .
  • sčítání 1+6+0+0 = 7. Dělením 7 zůstane zbytek 0, takže den v týdnu je sobota.

Vzorec je w = (d + m + y + c) mod 7.

Upravený juliánský kalendář

Všimněte si toho, že datum (a tedy i den v týdnu) v revidovaném juliánském a gregoriánském kalendáři je stejné od 14. října 1923 do 28. února 2800 n. L. Včetně a že u velkých let může být možné odečíst 6300 nebo jejich násobek před začíná tak, aby dosáhl roku, který je uvnitř nebo blíže ke stolu.

Chcete -li pomocí tabulky vyhledat všední den libovolného data pro jakýkoli rok, odečtěte 100 od roku, vydělte rozdíl 100, vynásobte výsledný kvocient (vynechání zlomků) sedmi a vydělte produkt devíti. Všimněte si kvocientu (vynechání zlomků). Zadejte tabulku s juliánským rokem a těsně před konečnou divizí sečtěte 50 a odečtěte výše uvedený kvocient.

Příklad: Jaký je den v týdnu 27. ledna 8315?

8315−6300 = 2015, 2015−100 = 1915, 1915/100 = 19 zbytek 15, 19 × 7 = 133, 133/9 = 14 zbytek 7. 2015 je o 700 let před 1315, takže se používá 1315. Z tabulky: pro stovky (13): 6. Pro zbývající číslice (15): 4. Pro měsíc (leden): 0. Pro datum (27): 27. 6 + 4 + 0 + 27 + 50 - 14 = 73 . 73/7 = 10 zbývající 3. Den v týdnu = úterý.

Dominantní dopis

Chcete -li najít dominantní písmeno , spočítejte si den v týdnu na 1. ledna nebo 1. října. Pokud je neděle, dominantní písmeno je A, pokud sobota B, a podobně zpět přes týden a vpřed přes abecedu do pondělí, což je G.

Skokové roky mají dvě nedělní písmena, takže pro leden a únor spočítejte den v týdnu pro 1. leden a pro březen až prosinec vypočítejte den v týdnu pro 1. říjen.

Skokové roky jsou všechny roky, které se dělí přesně čtyřmi s následujícími výjimkami:

V gregoriánském kalendáři - všechny roky, které dělí přesně 100 (jiné než ty, které dělí přesně 400).

V revidovaném juliánském kalendáři - všechny roky, které dělí přesně 100 (jiné než ty, které dávají zbytek 200 nebo 600 při dělení 900).

„Soudný den“

Toto je artefakt rekreační matematiky. Vysvětlení najdete v pravidlech soudného dne .

Zkontrolujte výsledek

Tuto tabulku použijte k nalezení dne v týdnu bez jakýchkoli výpočtů.

Index Po
A.
Út
B
Středa
C.
Čt
D

E
So
F.
Slunce
G.
Věčný gregoriánský a juliánský kalendář
Použijte Jan a únor pro přestupné roky
Datum Písmeno v řádku roku pro písmeno v řádku století

Všechny dny C jsou doomsdays

Juliánské
století
Gregoriánské
století
datum 01
08
15
22
29
02
09
16
23
30
03
10
17
24
31
04
11
18
25

05
12
19
26

06
13
20
27

07
14
21
28

12 19 16 20 Duben Jul Jan G A B C D E F 01 07 12 18 29 35 40 46 57 63 68 74 85 91 96
13 20 Září Prosince F G A B C D E 02 13 19 24 30 41 47 52 58 69 75 80 86 97
14 21 17 21 Června E F G A B C D 03 08 14 25 31 36 42 53 59 64 70 81 87 92 98
15 22 Února Mar listopad D E F G A B C 09 15 20 26 37 43 48 54 65 71 76 82 93 99
16 23 18 22 Srpna Února C D E F G A B 04 10 21 27 32 38 49 55 60 66 77 83 88 94
17 24 Smět B C D E F G A 05 11 16 22 33 39 44 50 61 67 72 78 89 95
18 25 19 23 Jan Října A B C D E F G 06 17 23 28 34 45 51 56 62 73 79 84 90 0 0
[Rok/100] Gregoriánské
století
20
16
21
17
22
18
23
19
Mod roku 100
Juliánské
století
19
12
20
13
21
14
22
15
23
16
24
17
25
18

Příklady:

  • Pro běžnou metodu
26. prosince 1893 (GD)

Prosinec je v řádku F a 26 je ve sloupci E , takže dopis pro data je C nachází v řádku F a sloupci E . 93 (rok mod 100), je v řadě D (rok řádku) a písmeno C v řadě let se nachází ve sloupci G . 18 ([rok/100] ve sloupci gregoriánského století) je v řádku C (řada století) a písmeno v řádku století a sloupci G je B, takže den v týdnu je úterý.

13. října 1307 (JD)

13. října je F den. Písmeno F v řadě let (07) je umístěn ve sloupci G . Písmeno v řádku století (13) a sloupci G je E, takže den v týdnu je pátek.

1. ledna 2000 (GD)

1. leden odpovídá G, G v řádku roku ( 0 0) odpovídá F v řádku století ( 20 ) a F odpovídá sobotě.

Pilný vzorec pro metodu: „Datum, písmeno (G), písmeno (G) je v řádku roku ( 0 0) pro písmeno (F) v řádku století ( 20 ) a pro den se písmeno (F) stane všední den (sobota) “ .

Metoda Sunday Letter

Každý den v roce (kromě 29. února) má přiděleno písmeno v opakující se sekvenci ABCDEFG. Série začíná A 1. ledna a pokračuje znovu A 31. prosince. Nedělní dopis je ten, který stojí proti všem nedělím v roce. Protože 29. únor nemá žádné písmeno, znamená to, že nedělní dopis na březen až prosinec je o krok zpět v pořadí ve srovnání s tím na leden a únor. Písmeno pro jakékoli datum bude nalezeno tam, kde se řádek obsahující měsíc (černě) nalevo od „latinského čtverce“ setkává se sloupcem obsahujícím datum nad „latinským čtvercem“. Nedělní písmeno najdete tam, kde se sloupec obsahující století (pod „latinským čtvercem“) setkává s řádkem obsahujícím poslední dvě číslice roku napravo od „latinského čtverce“. Pro přestupný rok je takto nalezený nedělní dopis ten, který platí od března do prosince.

Chcete -li tedy například najít všední den 16. června 2020:

Sloupec „20“ se setkává s řádkem „20“ v místě „D“. Řádek „červen“ odpovídá sloupci „16“ na „F“. Protože F jsou dvě písmena od D, tak pracovní den je dva dny od neděle, tj. V úterý.

Matematické algoritmy

Rata Die

Triviální Rata Die metoda funguje sečtením počtu dnů d , která uplynula od datem známého den v týdnu D . V den v týdnu je pak dána ( D + d ) mod 7 , které odpovídají co konvence se použije pro kódování D .

Tato metoda je dražší, než je potřeba, a není praktická pro lidský výpočet. Společnost IBM použila ve svém programovacím jazyce REXX metodu Rata Die s použitím známého základního data 1. ledna, AD 1, pondělí.

Například datum 13. srpna 2009 je 733632 dní od ledna AD 1. Vydělením čísla 7 se získá 4, tedy čtvrtek.

Gaussův algoritmus

Carl Friedrich Gauss popsal metodu pro výpočet dne v týdnu k 1. lednu v kterémkoli daném roce ručně psanou poznámkou ve sbírce astronomických tabulek. Nikdy to nezveřejnil. Nakonec byl do jeho sebraných děl zařazen v roce 1927. Ve srovnání s Rata Die výsledek pomáhá zjednodušit počítání let.

Gaussova metoda byla použitelná pro gregoriánský kalendář. Ve všední dny počítal od 0 do 6 počínaje nedělí. Definoval následující operaci.

Vstupy
Rok počet , měsíc řada M , číslo dne D .
Výstup
Den v roce.
Postup
  1. Nejprve určete den v týdnu d 1 od 1. ledna.
    • Pro gregoriánský kalendář je všední den . Alternativně nastavte C = A \ 100 , Y = A  % 100 a hodnota je .
    • U juliánského kalendáře je všední den nebo .
  2. Nyní určit měsíční související posun m pomocí vyhledávací tabulky s M .
  3. Návrat d = ( d 1 + m + D ) % 7 .
Tabulka měsíčních ofsetů
Měsíce Jan Února Mar Duben Smět Června Jul Srpna Září Října listopad Prosince
Běžné roky 0 3 3 6 1 4 6 2 5 0 3 5
Přestupné roky 4 0 2 5 0 3 6 1 4 6

Výše uvedený postup lze shrnout do jediného výrazu pro gregoriánský případ:

Fungoval příklad

Pro rok číslo 2000, A - 1 = 1999 , Y - 1 = 99 a C = 19 je všední den 1. ledna

Dny v týdnu k 30. 04. 1777 a 23. února 1855 jsou

a

Vysvětlení a poznámky

Algoritmus pro den v týdnu od 1. ledna lze prokázat pomocí modulo aritmetiky. Hlavním bodem je, že protože 365 mod 7 = 1 , každý rok přidá 1 den k postupu. Zbytek je úprava pro přestupný rok. Verze založené na století mají 36525 mod 7 = 6 .

Tabulka měsíčních offsetů ukazuje divergenci v únoru kvůli přestupnému roku. Běžnou technikou (později používanou Zellerem) je posunout měsíc tak, aby začínal v březnu, takže přestupný den je na konci počítání. Kromě toho, jak později ukázal Zeller, lze tabulku nahradit aritmetickým výrazem.

Tento vzorec také Kraitchik a Schwerdtfeger převedli na grafické a tabulkové metody pro výpočet jakéhokoli dne v týdnu.

Nesourodá variace

Následující vzorec je příkladem verze bez vyhledávací tabulky a s transponovaným měsícem. Vzorec je

kde

  • Y je rok minus 1 za leden nebo únor a rok za jakýkoli jiný měsíc
  • y jsou poslední 2 číslice Y
  • c jsou první 2 číslice Y
  • d je den v měsíci (1 až 31)
  • m je posunutý měsíc (březen = 1,…, únor = 12)
  • w je den v týdnu (0 = neděle,…, 6 = sobota). Pokud je w záporné, musíte k němu přidat 7.
Tabulka měsíčních ofsetů ( )
Měsíce Jan Února Mar Duben Smět Června červenec Srpna Září Října listopad Prosince
Ofset 0 3 2 5 0 3 5 1 4 6 2 4

Zellerův algoritmus

V Zellerově algoritmu jsou měsíce očíslovány od 3 za březen do 14 za únor. Předpokládá se, že rok začne v březnu; to například znamená, že leden 1995 bude považován za 13. měsíc roku 1994. Vzorec pro gregoriánský kalendář je

kde

  • Y je rok minus 1 za leden nebo únor a rok za jakýkoli jiný měsíc
  • y jsou poslední 2 číslice Y
  • c jsou první 2 číslice Y
  • d je den v měsíci (1 až 31)
  • m je posunutý měsíc (březen = 3, ... leden = 13, únor = 14)
  • w je den v týdnu (1 = neděle, .. 0 = sobota)

Jediným rozdílem je jeden mezi Zellerovým algoritmem ( Z ) a Nesourodým Gaussovým algoritmem ( G ), tj. Z - G = 1 = neděle .

(Březen = 3 v Z, ale březen = 1 v G )
Tabulka měsíčních ofsetů ( )
Měsíce Mar Duben Smět Června Jul Srpna Září Října listopad Prosince Jan Února
Ofset 1 4 3 6 1 4 6 2 5 0 3 5

Wangův algoritmus

Wangův algoritmus pro výpočet gregoriánského kalendáře pro člověka je (vzorec by měl být odečten 1, pokud m je 1 nebo 2, pokud je rok přestupným rokem)

kde

  • je poslední číslice roku
  • je poslední druhá číslice roku
  • jsou první 2 číslice roku
  • je den v měsíci (1 až 31)
  • je měsíc (leden = 1,…, prosinec = 12)
  • je den v týdnu (0 = neděle,…, 6 = sobota)
  • je funkce null-days (posun měsíce) s hodnotami uvedenými v následující tabulce
m
1 1 Den
3 5 m + 2
5 7
7 9
9 3 m + 1
11 12
2 12 m + 3
4 2 m - 2
6 4
8 6
10 8
12 10

Algoritmus pro juliánský kalendář lze odvodit z výše uvedeného algoritmu

kde je soudný den.

m
1 3 C den
3 7 m + 4
5 9
7 11
9 5 m - 4
11 7
2 0 m - 2
4 4 m
6 6
8 8
10 10
12 12

Jiné algoritmy

Schwerdtfegerova metoda

V částečně tabulkové metodě podle Schwerdtfegera je rok rozdělen do století a dvouciferného roku v rámci století. Přístup závisí na měsíci. Pro m ≥ 3 ,

takže g je mezi 0 a 99. Pro m = 1,2 ,

Vzorec pro den v týdnu je

kde je zvolen kladný modul.

Hodnota e je získána z následující tabulky:

m 1 2 3 4 5 6 7 8 9 10 11 12
E 0 3 2 5 0 3 5 1 4 6 2 4

Hodnota f se získá z následující tabulky, která závisí na kalendáři. Pro gregoriánský kalendář

c mod 4 0 1 2 3
F 0 5 3 1

Pro juliánský kalendář

c mod 7 0 1 2 3 4 5 6
F 5 4 3 2 1 0 6

Metoda Lewise Carrolla

Charles Lutwidge Dodgson ( Lewis Carroll ) vymyslel metodu připomínající hádanku, přesto částečně tabulkovou v používání stejných indexových čísel pro měsíce jako ve výše uvedené „Kompletní tabulce: juliánský a gregoriánský kalendář“. Uvádí stejné tři úpravy za první tři měsíce nepřestupných let, jednu o 7 vyšší za poslední a dává záhadné pokyny k nalezení zbytku; jeho úpravy po staletí mají být určeny pomocí vzorců podobných těm, které jsou uvedeny v tabulce století. Ačkoli je jeho tvrzení jasné, že jeho metoda funguje i pro data starého stylu , jeho příklad je reprodukován níže, aby určil, že „1676, 23. února“ je středa, funguje pouze v juliánském kalendáři, který začíná rokem 1. ledna, místo 25. března jako juliánský kalendář „starého stylu“ .

Algoritmus:

Vezměte si dané datum ve 4 porcích, tj. počet století, počet let přes, měsíc, den v měsíci.

Vypočítejte následující 4 položky a každou z nich přidejte, když ji najdete, k součtu předchozích položek. Pokud položka nebo součet přesáhne 7, vydělte 7 a ponechte pouze zbytek.

Položka století: U ' Starého stylu ' (který skončil 2. září 1752) odečtěte od 18. Pro ' Nový styl ' (který začal 14. září 1752) vydělte 4, vezměte přebytek ze 3, zbytek vynásobte 2.

Položka roku: Sečtěte počet tuctů, přebytek a počet 4 s v přebytku.

Měsíční položka: Pokud začíná nebo končí samohláskou, odečtěte číslo označující jeho místo v roce od 10. To plus počet dní udává položku pro následující měsíc. Položka za leden je „0“; za únor nebo březen „3“; za prosinec „12“.

Denní položka: Takto dosažený součet musí být opraven odečtením „1“ (nejprve sčítáním 7, pokud je součet „0“), pokud je datum v lednu nebo únoru v přestupném roce, přičemž pamatujeme na to, že každý rok, dělitelné 4, je přestupný rok, s výjimkou pouze stoletých let, v `` novém stylu '', kdy počet století není tak dělitelný (např. 1800).

Konečný výsledek udává den v týdnu, „0“ znamená neděli, „1“ pondělí atd.

Příklady:

1783, 18. září

17, děleno 4, ponechává „1“ nad; 1 ze 3 dává „2“; dvakrát 2 je „4“. 83 je 6 tucet a 11, což dává 17; plus 2 dává 19, tj. (děleno 7) „5“. Celkem 9, tj. „2“ Položka za srpen je „8 od 10“, tj. „2“; za září to tedy je „2 plus 31“, tj. „5“ Celkem 7, tj. „0“, což zhasne. 18 dává „4“. Odpověď: „Čtvrtek“.

1676, 23. února

16 od 18 dává „2“ 76 je 6 tucet a 4, dává 10; plus 1 dává 11, tj. „4“. Celkem „6“ Položka za únor je „3“. Celkem 9, tj. „2“ 23 dává „2“. Oprava „4“ za přestupný rok dává „3“. Odpověď: „Středa“.

Protože 23. února 1676 (počítáno jako únor jako druhý měsíc) je pro Carrolla stejný den jako Gregorian 4. března 1676, nedaří se mu dospět ke správné odpovědi, konkrétně „Pátek“ na datum starého stylu, které je v gregoriánském kalendáři je stejný den jako 5. března 1677. Pokud by správně předpokládal, že rok začíná 25. března , jeho metoda by odpovídala různým číslům let - stejně jako se liší narozeniny George Washingtona - mezi těmito dvěma kalendáři.

Je pozoruhodné, že ti, kteří znovu publikovali Carrollovu metodu, nedokázali poukázat na jeho chybu, zejména Martin Gardner .

V roce 1752 britské impérium upustilo od používání juliánského kalendáře starého stylu po přijetí gregoriánského kalendáře , který se stal dnešním standardem ve většině zemí světa. Další pozadí najdete v datech starého stylu a nového stylu .

Metody v počítačovém kódu

Keithe

V níže uvedených jazycích C jsou y, ma d, respektive celočíselné proměnné představující rok (např. 1988), měsíc (1-12) a den v měsíci (1-31).

(d+=m < 3 ? y-- : y-2, 23*m/9+d+4+y/4-y/100+y/400)%7

V roce 1990 publikovali Michael Keith a Tom Craver výše uvedený výraz, který se snaží minimalizovat počet úhozů potřebných k zadání samostatné funkce pro převod gregoriánského data na číselný den v týdnu. Vrací 0= neděle, 1= pondělí atd. Tento výraz má podobnou strukturu jako Zellerův algoritmus, ale má jedinečnou měsíční složku.

Krátce poté Hans Lachman zefektivnil svůj algoritmus pro snadné použití na zařízeních nižší třídy. Jak bylo původně navrženo pro čtyřfunkční kalkulačky, jeho metoda vyžaduje méně záznamů na klávesnici tím, že omezí její rozsah buď na AD 1905–2099, nebo na historická juliánská data. Později byl upraven tak, aby konvertoval jakékoli gregoriánské datum, dokonce i na počítadle . U zařízení na bázi Motorola 68000 je podobně menší potřeba buď registrů procesoru, nebo operačních kódů , v závislosti na zamýšleném konstrukčním cíli.

Sakamotovy metody

Tabelární předchůdcem Tøndering algoritmu je zakotven v následujícím K & R C funkce. S menšími změnami byl upraven pro další programovací jazyky na vysoké úrovni , jako je APL2 . Zveřejnil Tomohiko Sakamoto na diskusní skupině Usenet comp.lang.c v roce 1992, je přesný pro jakékoli gregoriánské datum.

dayofweek(y, m, d)	/* 1 <= m <= 12,  y > 1752 (in the U.K.) */
{
    static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
    if ( m < 3 )
    {
        y -= 1;
    }
    return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}

Vrátí se 0= neděle, 1= pondělí atd.

Sakamoto také současně zveřejnil zmatenější verzi:

dow(m,d,y) { y-=m<3; return(y+y/4-y/100+y/400+"-bed=pen+mad."[m]+d)%7; }

Tato verze kóduje měsíční offsety v řetězci a v důsledku toho vyžaduje počítač, který používá standardní ASCII ke správnému spuštění algoritmu, což snižuje jeho přenositelnost . Navíc oba algoritmy vynechat int deklarace typu , který nemá v původním K & R C, ale nejsou povoleny v ANSI C .

(Tønderingův algoritmus má opět podobnou strukturu jako Zellerova shoda a Keithův krátký kód, kromě toho, že komponenta související s měsícem je 31*m/12. Sakamotův algoritmus je někde mezi Nesourodým Gaussovým a Schwerdtfegerovým algoritmem, zjevně nezná formu výrazu.)

Viz také

Reference

  • Hale-Evans, Ron (2006). „Hack č. 43: Vypočítejte každý všední den“. Hacky mysli (1. vyd.). Peking: O'Reilly. s.  164–169 . ISBN 9780596101534.
  • Thioux, Marc; Stark, David E .; Klaiman, Cheryl; Schultz, Robert T. (2006). „Den v týdnu, kdy jste se narodili za 700 ms: Výpočet kalendáře v autistickém savantu“. Journal of Experimental Psychology: Lidské vnímání a výkon . 32 (5): 1155–1168. doi : 10,1037/0096-1523,32.5.1155 .
  • Treffert, Darold A. „Proč vypočítat kalendář?“. Ostrovy génia: bohatá mysl autistů, získaných a náhlých savantů (1. publ., [Repr.]. Ed.). Londýn: Jessica Kingsley. s. 63–66. ISBN 9781849058735.

externí odkazy