כלל יום הדין

ג'ון קונוויי, ממציא אלגוריתם יום הדין.]]
כלל יום הדין (באנגלית: Doomsday rule) או אלגוריתם יום הדין (באנגלית: Doomsday algorithm) הוא אלגוריתם המאפשר לחשב את היום בשבוע שבו חל תאריך נתון בלוח הגרגוריאני. הוא נעזר בכך שללוח הגרגוריאני יש מחזוריות בת ארבע מאות שנה וכך האלגוריתם מוגדר לתמיד.

האלגוריתם, שמאפשר חישוב בראש, הומצא על ידי ג'ון הורטון קונוויי שקיבל השראה מעבודתו של לואיס קרול על אלגוריתם ללוח שנה נצחי. 

==עקרונות האלגוריתם==
האלגוריתם מתבסס על כך שבכל שנה יש יום מסוים בשבוע (יום הדין) שכמה תאריכים קלים לזכירה חלים בו; לדוגמה, 4/4, 6/6, 8/8, 10/10, 12/12 והיום האחרון של חודש פברואר (28/2; וכאשר השנה מתחלקת ב-4, 29/2). יישום אלגוריתם יום הדין כרוך בשלושה שלבים:
# קביעת "יום העוגן" של המאה.
# שימוש ב"יום העוגן" לחישוב יום הדין של השנה.
# בחירת התאריך הקרוב ביותר מאלה שנופלים על יום הדין (למשל 4/4, 6/6, 8/8) וספירת מספר הימים (מודולו 7) בין התאריך לבין התאריך שרוצים למצוא באיזה יום הוא חל.

ניתן להשתמש בטבלת ימי דין, כמפורט בהמשך, כדי לדלג על שלבים 1 ו-2.

הטכניקה חלה הן על לוח השנה הגרגוריאני והן על הלוח היוליאני, אף על פי שימי הדין שלהם יהיו בדרך כלל ימים שונים.

האלגוריתם פשוט דיו לחישוב בראש, לכל אחד עם יכולות אריתמטיות בסיסיות. קונוויי יכול היה בדרך כלל לעשות את החישוב תוך פחות משתי שניות. כדי לשפר את מהירותו, הוא תירגל את החישובים בעזרת מחשב, שמתוכנת לשאול אותו לגבי תאריך אקראי בכל פעם בו הוא נכנס אליו.

==טבלת ימי דין==
כדי למצוא את יום הדין של השנה (לפי הלוח הגרגוריאני), ניתן להיעזר בטבלה הבאה. בהמשך הערך מופיעה שיטה למציאת יום הדין בלא טבלה.
{|class="wikitable" style="line-height:normal;margin:auto;table-layout:fixed;text-align:center"
|+טבלת ימי דין לפי הלוח הגרגוריאני
|-
!יום שני
!יום שלישי
!יום רביעי
!יום חמישי
!יום שישי
!יום שבת
!יום ראשון
!יום שני
!יום שלישי
!יום רביעי
!יום חמישי
!יום שישי
!יום שבת
!יום ראשון
|-
| ←||1944||1945||1946||1947|| ←||1948||1949||1950||1951|| ←||1952||1953||1954
|-
|1955|| ←||1956||1957||1958||1959|| ←||1960||1961||1962||1963|| ←||1964||1965
|-
|1966||1967|| ←||1968||1969||1970||1971|| ←||1972||1973||1974||1975|| ←||1976
|-
|1977||1978||1979|| ←||1980||1981||1982||1983|| ←||1984||1985||1986||1987|| ←
|-
|1988||1989||1990||1991|| ←||1992||1993||1994||1995|| ←||1996||1997||1998||1999
|-
| ←||2000||2001||2002||2003|| ←||2004||2005||2006||2007|| ←||2008||2009||2010
|-
|2011|| ←||2012||2013||2014||2015|| ←||2016||2017||2018||2019|| ←||2020||2021
|-
|2022||2023|| ←||2024||2025||2026||2027|| ←||2028||2029||2030||2031|| ←||2032
|-
|2033||2034||2035|| ←||2036||2037||2038||2039|| ←||2040||2041||2042||2043|| ←
|-
|2044||2045||2046||2047|| ←||2048||2049||2050||2051|| ←||2052||2053||2054||2055
|-
| ←||2056||2057||2058||2059|| ←||2060||2061||2062||2063|| ←||2064||2065||2066
|-
|2067|| ←||2068||2069||2070||2071|| ←||2072||2073||2074||2075|| ←||2076||2077
|-
|2078||2079|| ←||2080||2081||2082||2083|| ←||2084||2085||2086||2087|| ←||2088
|-
|2089||2090||2091|| ←||2092||2093||2094||2095|| ←||2096||2097||2098||2099||2100
|}
ניתן לראות כי לפני שנה שאינה מעוברת יום הדין זז ליום הבא - זאת משום שמספר הימים בשנה שאינה מעוברת (365) מודולו 7 יוצא 1. לעומת זאת, לפני שנה מעוברת יום הדין זז ביומיים משום שמספר הימים בשנה מעוברת (366) מודולו 7 יוצא 2, ומכאן שתהא תזוזה של יומיים.
==תאריכים קלים לזכירה שיוצאים תמיד ביום הדין==
בכל שנה, תאריכים אלו (על פי הלוח הגרגוריאני) חלים ביום הדין. 
{| class="wikitable"
|-
! חודש !! תאריך !! שיטת זכירה
|-
| ינואר || 3/1 (שנה רגילה) או 4/1 (שנה מעוברת) 11/1 (שנה מעוברת) || היום השלישי בשלוש השנים הראשונות, והרביעי ברביעית כל הספרות אחד
|-
| פברואר || 14/2 (שנה רגילה) 22/2 (שנה מעוברת) 28/2 (שנה רגילה) או 29/2 (שנה מעוברת) || יום ולנטיין כל הספרות שתיים היום האחרון של פברואר
|-
| מרץ || "0/3" 14/3 21/3 || היום האחרון של פברואר יום פאי היום הראשון של האביב
|-
| אפריל || 4/4 || חודש זוגי
|-
| מאי || 9/5 || 9 עד 5 בסבן אילבן
|-
| יוני || 6/6 || חודש זוגי
|-
| יולי || 4/7 11/7 || יום העצמאות האמריקאי 9 עד 5 בסבן אילבן
|-
| אוגוסט || 8/8 || חודש זוגי
|-
| ספטמבר || 5/9 || 9 עד 5 בסבן אילבן
|-
| אוקטובר || 10/10 31/10 || חודש זוגי ליל כל הקדושים
|-
| נובמבר || 7/11 || 9 עד 5 בסבן אילבן
|-
| דצמבר || 12/12 26/12 || חודש זוגי יום הקופסאות
|}

==מציאת יום הדין בלא טבלה==
ישנם מספר אלגוריתמים למציאת יום הדין של השנה ללא טבלת שנים, כמו זו שמופיעה לעיל. השיטה מתבססת על חישוב התזוזות של הימים החל מ"יום העוגן" של המאה. 
===מציאת "יום העוגן" של המאה===
לצורכי מציאת יום הדין נאמר כי מאה מתחילה בשנה המסתיימת בספרות 00' ונגמרת בשנה המסתיימת בספרות 99'.

כאשר <math>c = \lfloor year/100 \rfloor</math>

עבור הלוח הגרגוריאני:
:<math>(5\times(c\bmod 4)+ \rm{2)\bmod 7 = anchor}</math>
עבור הלוח היוליאני:
:<math>(6\times(c\bmod 7)\bmod 7 + \rm{1)\bmod 7 = anchor}</math>

כאשר 0=ראשון, 1=שני וכן הלאה עד 6=שבת.

מכאן ש:
{| class="wikitable" style="margin: "
! מאה || יום העוגן
|-
| 1800–1899 || שישי
|-
| 1900–1999 || רביעי
|-
| 2000–2099 || שלישי
|-
| 2100–2199 || ראשון
|}

===חישוב יום הדין של השנה באמצעות יום העוגן של המאה===
ישנם מספר אלגוריתמים למציאת יום הדין של השנה. דוגמה לאלגוריתם כזה הוא האלגוריתם הבא:
# חלק את שתי הספרות האחרונות של השנה ב-12, ועגל כלפי מטה (פונקציית הערך השלם). קרא לתוצאה a.
# שארית החלוקה מן השלב הקודם יקרא b.
# חלק את b ב-4 ועגל כלפי מטה. נקרא לתוצאה c.
# חבר את שלוש התוצאות (a,b,c). לסכום הוסף את ערכו של יום העוגן (ראשון=0, שני=1 וכן הלאה).
# חלק את התוצאה ב-7. השארית היא ערכו של יום הדין (ראשון=0, שני=1 וכן הלאה).

כלומר:
:<math>\begin{matrix}\left({\left\lfloor{\frac{y}{12}}\right\rfloor+y \bmod 12+\left\lfloor{\frac{y \bmod 12}{4}}\right\rfloor} +\rm{anchor}\right)\bmod 7=\rm{Doomsday}\end{matrix}</math>

==דוגמאות מלאות==
===דוגמה א'===
נניח שנרצה למצוא את היום בשבוע בו חל ה-18 בספטמבר 1985. יום העוגן של המאה הוא רביעי (אינדקס 3), ועליו לפי האלגוריתם נוסיף את a, b, c.
*a הוא פונקציית הערך השלם של 85/12, כלומר 7.
*b הוא 85 מודולו 12, כלומר 1
*c הוא פונקציית הערך השלם של b/4, כלומר 0.
חיבור של a,b,c ויום העוגן יוצא 11. 11 מודולו 7 הוא 4, ומכאן שיום הדין של 1985 הוא חמישי (אינדקס 4). כעת נשווה את התאריך ליום דין קרוב, נניח ה-5/9. ההפרש בין שני התאריכים הוא 13 יום. נוסיף למספר זה את ערכו של יום הדין השנתי, ונגיע ל-17. 17 מודולו 7 הוא 3, ומכאן שה-18 בספטמבר 1985 חל ביום רביעי (אינדקס 3). 
===דוגמה ב'===
נניח שנרצה למצוא את היום בשבוע בו פרצה מלחמת האזרחים האמריקנית בפורט סאמטר, שהיה ב-12 באפריל 1861. נוכל למצוא את יום העוגן באמצעות הטבלה שלעיל או לחשבו - 18 מודולו 4 הוא 2, כפול 5 הוא 10, ועוד 2 הוא 12, מודולו 7 הוא 5 (יום שישי). באמצעות חישוב a,b,c בדומה לדוגמה לעיל, סיכומם והוספת 5, נקבל 11. 11 מודולו 7 הוא 4, ומכאן שיום הדין היה בחמישי (אינדקס 4). נשתמש ביום הדין 4/4 שחל 8 ימים קודם לפני ה-12 באפריל. 8+4 הם 12. 12 מודולו 7 הוא 5 (יום שישי). מכאן שה-12 באפריל 1861 חל בשישי. 
==הערות שוליים==

קטגוריה:אלגוריתמים
קטגוריה:הלוח הגרגוריאני
קטגוריה:הלוח היוליאני
קטגוריה:ג'ון הורטון קונוויי