Pull to refresh

Comments 46

У меня только один вопрос: в какой час ночи тебе пришла в голову эта задача?
Мне кажется, визуально, мы можем представить задачу вот такой таблицей.
Табличка
Мысленно двигаем нашу ленту дат туда-сюда, смотрим на оранжевый столбец.
Надо убедиться, можем ли мы сдвигать начало года в рамках недели так, чтобы не было единиц в первом столбце. Т.е. проверит надо не все года, а все дни начала года. Которых может быть 7. С учетом високоснх годов получаем 14 вариантов.

В рамках каждого варианта надо проверить 12 дней — 12 первых чисел.
Является ли число понедельником, можно посчитать как
((«порядковый номер дня в году»+«смещение первого января относительно понедельника») mod 7) != 1
Ваша картинка не отображается. Поправьте её, пока есть время для редактирования комментария.
Да, если говорить про перебор, то такой способ сработает. Спасибо за интерес!

Можно добавить ещё 1 вопрос: что интересного в числе 20871?

UFO landed and left these words here
Да, я читал про такие календари. Проблема в том, что они либо очень объёмные, либо не очень вечные.
UFO landed and left these words here
Получается, по Григорианскому календарю 1 января 0 года был понедельник?
Нет, 1 января 0 года было бы субботой. Это был високосный год. Так же 1 января 0 года было субботой и по юлианскому календарю.

А вот 1 января 1 года было бы, как раз, понедельником.
0 года действительно не было. В первом предложении я это постарался подчеркнуть частицей «бы». А в третьем я опечатался. Имел ввиду, что субботой было 1 января 1 года по юлианскому календарю.

P. S. Пожалуйста, я рад, что вам понравилось!
Я вас еще более запутаю, сообщив что год рождения Иисуса Христа точно не установлен, существуют версии от -12 до 4 года от «рождества Христова». Дионисий Малый в 6 веке немного ошибся при вычислении даты этого основополагающего события, так в релиз и ушло. Исправление внедрять сложно, так и поддерживают легаси.
Нулевой год — первый год до нашей эры. Хотя, понятное дело, тогда действовали совсем другие календари.

Не было в григорианском календаре 1 января нулевого года. Нулевого года в нем вообще никогда не было. Был первый до р.х. и первый после р.х. Нулевая точка — около рассчитанной даты р.х., и это не год, а переход от одного года к другому.

UFO landed and left these words here
Небольшой оффтоп. Сейчас будет печальная история про необходимость общего разностороннего развития…
В далеком 1998/99 году мне попалась похожая задачка на олимпиаде. Ее решение давало мне очень хороший шанс поступления в понравившийся мне ВУЗ без экзаменов. Задача не сложная — всего-то делов, определить день недели по дате, зная, например, что 1 января 1800 года был понедельник и это был високосный год. Но вот беда: я забыл, что количество дней в месяцах не всегда чередуется, а в июле-августе повторяется. Календарей в поле зрения не было, смартфоны еще не появились, как итог — неверное решение и пролет с поступлением… Тоска, печаль…
1 января 1800 года было средой, а сам год невисокосный =)

На самом деле, мне тоже пришлось насильно вспоминать, сколько дней в каком месяце, когда сел писать статью. Есть метод счёта по костяшкам пальцев и впадинам между ними. Костяшка — 31 день, впадина — 28 / 29 / 30 дней. Если костяшка мизинца это январь, то костяшка указательного пальца — июль. А август снова начинается с костяшки.
Это я знаю. Но уже слишком поздно. :-(
Не знаю только, почему все с этими костяшками носятся. Мне лично гораздо проще запомнить несколько исторических фактов.

1. Юлианский календарь — он, собственно, почему Юлианский? потому что его Гай Юлий Цезарь ввёл.
2. Кто пришёл ему на смену? Известно кто — Октавиан Август. Которому суждено было всю жизнь бороться с призраком своего великого предка. И чтобы ему польстить один из месяцев (секстилий) переименовали в месяц Август.
3. Есть даже красивая легенда, что, собственно, Август и оторвал ещё один день от Февраля и прицепил к «своему» месяцу. Хотя вроде бы и неверная.

В любом случае всё это помнить совершенно необязательно — достаточно помнить два имени: Гай Юлий Цезарь и Октавиан Август… оба известные и знаменитые, оба «падающие» на свои два месяца… главное что и календарь-то Юлианский, а Император Июнь — точно в природе отсуствует…
UFO landed and left these words here

И как это поможет определить количество дней в ноябре?

Реперная точка: декабрь — 31, откатываемся от него назад, чередуя 31/30 до Июля/Августа
Можно и от января идти… хотя и дольше… главное помнить что два «длинных» месяца бок-о-бок — это июль-август. Ну ещё декабрь/январь, но тут, почему-то, ни у кого сложностей не возникает…
Да, конечно. Ноябрь идёт после августа — значит нужно идти от декабря взад.
В «Что-Где-Когда» был вопрос (лет 30 назад): «Что восьмой отнял у второго, чтобы стать не хуже седьмого?».
Есть одна прикольная штука, как система непрерывного счёта времени, которая используется для астрономических расчётов. Зовётся эра Скалигера, или юлианские дни. А ещё есть забавные закономерности при пересчёте юлианских дней в григорианский календарь.
Посмотрите, там нумерология весьма забавная.
Спасибо, посмотрю. А закономерности вполне себе понятные, просто со временем увеличивается разрыв между одинаковыми датами из-за разного определения високосных годов.

Было бы интересно посмотреть на решение на Прологе.

UFO landed and left these words here
Спасибо, замечательное решение!
UFO landed and left these words here
Но не ясно, будут ли такие четырёхсотлетние циклы начинаться в один и тот же день недели.


Ну почему же? 400 лет по 365 дней, плюс (100-3) дополнительных високосных дня дают 146097 дней цикла — число, делящееся на 7 нацело, без привлечения всяких сложных таблиц…
Безусловно так и есть! Таблица лишь визуализирует это и помогает найти двадцативосьмилетний цикл.
Помню в 5 классе, когда узнал как можно математический записывать деление с остатком / взятие остатка, вывел свою точную формулу вычисления дня недели для любой даты григорианского календаря. Да и цикл в 28 лет эмпирический нашел. А когда еще прочитал пару книжек про историю календаря — все стало на свои места. Но, блин, сколько бы я потом не спорил, из примерно 100 окружающих я не смог убедить ни одного человека в том что 2000 год это XX век :(
Да, есть такие странные убеждения и они широко распространены. Из таблицы видно, что если век начинается не с первого года, то закономерности рушатся. И, конечно, это всё следует из структуры календаря.

Есть ещё большие споры про десятилетия. Какие года правильно называть шестидесятыми, семидесятыми, и т. д. На Википедии было пару лет назад огромное обсуждение на эту тему с хорошими аргументами.
Можно провести следующую аналогию:
Ящик пива заканчивается двадцатой бутылкой. Новый начинается с двадцать первой.
Можно проводить любые аналогии, но для людей «не умеющих в математику и гордящихся этим» (а таких, вне Хабра, большинство — да и на Хабре их много) это всё неважно. 2000 — дата круглая, красивая… а 2001 — это что?

Правильные люди праздновали линолеум как минимум четырежды.
И пофиг, что правильных только два.

а если просто перебрать календари за 28 лет?
Интересный факт: с 1 по 13 февраля 1918 года в Советской России не родился ни один человек.
Это накрыло демографической волной с 4-15 октября 1582г?
Когда она, наконец, дошла из Европы =)
Тогда вы готовы решить следующую олимпиадную задачу по информатике: доказать, что 13 число чаще выпадает на пятницу, чем на другие дни недели.
Особый шик — решить с карандашиком, без компа.
Замечательная задача!

Для начала вспомним, что в григорианском календаре возможно 14 различных годов. Первое января может приходиться на любой из семи дней недели, да ещё каждый год может быть високосным или невисокосным.

Посмотрим на таблицу сдвигов дней недели на 13 число каждого месяца от дня недели на первое января:
    Янв Фев Март Апр Май Июнь Июль Авг Сен Окт Нояб Дек
Н:    5   1    1   4   6    2    4   0   3   5    1   3
В:    5   1    2   5   0    3    5   1   4   6    2   4

Назовём «невисокосной неделей» семь невискосных годов, начинающихся на каждый день недели. Тогда «високосная неделя» — это семь таких високосных годов.

По таблицам сдвигов можно посчитать, что если полностью проходит високосная или невисокосная «недели», то 13 число будет одинаковое количество раз (по 12) приходиться на каждый день недели.

Двадцативосьмилетний цикл состоит из одной високосной недели и трёх невисокосных. Отсюда легко понять, что чтобы доказать утверждение надо рассмотреть неполные двадцативосьмилетние циклы. Их шесть: три приходятся на начало 2, 3 и 4 столетий, три приходятся на конец 1, 2 и 3 столетий в четырёхсотлетнем цикле.

Подсчитаем в этих неполных циклах количество всех типов годов и найдём НЕПОЛНЫЕ невисокосные и високосные «недели». Посмотрим, сколько в них годов с учётом високосности:
    Пн Вт Ср Чт Пт Сб Вс
Н:      1     1
В:      1  1     2     2

Для этих годов подсчитаем количество раз, которое 13 число приходится на каждый день недели:
Пн Вт Ср Чт Пт Сб Вс
13 13 15 12 16 12 15

Видно, что 13 число действительно чаще выпадает на пятницу, чем на другие дни недели. ЧТД.
Меня на днях такой вопрос озадачил: какое число чаще всего выпадает на воскресенье?
Only those users with full accounts are able to leave comments. Log in, please.