Алгоритм Судного дня
Алгоритм (метод) судного дня (англ. doomsday algorithm) — алгоритм, позволяющий в уме посчитать, какой день недели приходится на выбранную дату. Разработан около 1970 года британским математиком Джоном Конвеем. Применим для дат по григорианскому календарю, но существуют модификации для юлианского календаря.
Алгоритм опирается на так называемый «судный день» (англ. doomsday). «Судным» назван последний день февраля — 28 февраля невисокосного года или 29 февраля високосного года. Зная день недели, приходящийся на последний день февраля выбранного года, и пользуясь алгоритмом, можно узнать день недели любой даты выбранного года.
Алгоритм
[править | править код]Перед использованием алгоритма требуется узнать, какой день недели приходится на последний день февраля выбранного года. В 2024 году последний день февраля — четверг. Если следующий год невисокосный, то день недели последнего дня февраля следующего года будет смещён от дня недели последнего дня февраля текущего года на один день вперёд; если високосный, то — на два дня вперёд.
Опишем используемые алгоритмом закономерности.
Дни недели, приходящиеся на 4 апреля (04.04), 9 мая (09.05), 6 июня (06.06), 11 июля (11.07), 8 августа (08.08), 5 сентября (05.09), 10 октября (10.10), 7 ноября (07.11), 12 декабря (12.12), всегда совпадают с днём недели, приходящимся на последний день февраля. Например, в 2024 году последний день февраля — четверг и 4 апреля — тоже четверг. Для запоминания дат 04.04, 06.06, 08.08, 10.10, 12.12 можно заметить, что для чётных месяцев, начиная с апреля (4-го месяца), день месяца совпадает с номером месяца. Для запоминания пары 09.05, 05.09 и пары 07.11, 11.07 можно заметить, что на первую дату из пары приходится праздник (9 мая (09.05) — День Победы; 7 ноября (07.11) — годовщина Октябрьской революции), а вторая дата из пары получается перестановкой дня месяца и номер месяца. В английском языке известна запоминалка: «I work from 9 to 5 at the 7-11» — «Я работаю с 9 до 5 в магазине „семь-одиннадцать“»[1].
Дни недели, приходящиеся на 3 января невисокосного года и на 4 января високосного года, совпадают с днём недели, приходящимся на последний день февраля (три невисокосных года — третье января, в четвёртом (високосном) году — четвёртое января).
Дни недели, приходящиеся на 7 марта (07.03), 14 марта (14.03), 21 марта (21.03) и 28 марта (28.03), совпадают с днём недели, приходящимся на последний день февраля. Заметим, что дни марта (7 , 14, 21, 28) кратны семи.
Далее перечислены месяцы, для которых при совпадении дней месяцев совпадают и дни недели:
- январь високосных годов, апрель, июль;
- январь и октябрь невисокосных годов;
- февраль невисокосных годов, март и ноябрь;
- февраль и август високосных годов;
- сентябрь и декабрь.
Например, совпадают дни недели для 4 апреля и 4 июля (в 2021 году — воскресенье, в 2022 году — понедельник, в 2023 году — вторник), для 8 марта и 8 ноября (в 2021 году — понедельник), для 1 сентября и 1 декабря (в 2021 году — среда).
Итого:
Месяц | Последний день февраля | В високосных годах | Запоминалка |
---|---|---|---|
Январь | 03.01 | 04.01 | Три года 03, в четвёртом — 04 |
Февраль | 28.02 | 29.02 | Последний |
Март | «00».03 | «Нулевой» и все, делимые на 7 | |
Апрель | 04.04 | ||
Май | 09.05 | Nine to five[2]; День Победы | |
Июнь | 06.06 | ||
Июль | 11.07 | Seven-eleven[1] | |
Август | 08.08 | ||
Сентябрь | 05.09 | Nine to five[2] | |
Октябрь | 10.10 | ||
Ноябрь | 07.11 | Seven-eleven[1]; Октябрьская революция | |
Декабрь | 12.12 |
Примечания
[править | править код]Литература
[править | править код]- John Conway, Elwyn Berlekamp, Richard Guy: Winning Ways For Your Mathematical Plays. Vol. 2: Games in Particular. Academic Press, London 1982, 795—797. ISBN 0-120-91102-7
Ссылки
[править | править код]- Lewis Carroll’s 1887 Weekday Rule, 2011 (недоступная ссылка)
- COWAFOGO • Weekday Solving Simplified, 2011 (недоступная ссылка)
- Encyclopedia of Weekday Calculation by Hans-Christian Solka, 2010
- Doomsday calculator that also «shows all work»
- World records for mentally calculating the day of the week in the Gregorian Calendar
- What is the day of the week, given any date?
- Doomsday Algorithm
- Finding the Day of the Week