5-ый месяц в профессиональном трейдинге. Разбор полётов.

Эта статья получилась из вопроса, который я сам себе задал вчера.

«Существует ли год, в котором ни один месяц не начинается в понедельник?»

На первый взгляд — да. Год может начинаться с любого дня недели, месяцы тоже каждый раз начинаются в разные дни недели. Вариантов множество, скорее всего, найдётся и не один такой год. Так я подумал в первую минуту после того, как задался вопросом. Это следовало бы доказать. Перебрать все года, например. Простой и быстрый способ, но не интересный. Доказать математически было намного более заманчивой идеей, но как к этому подступиться я совершенно не понимал. Поэтому просто начал выписывать продолжительность каждого месяца на бумагу.
Тут стоит оговорить, что речь дальше пойдёт про григорианский календарь, по которому мы живём с 1918 года. Однако часть рассуждений будет верна и для юлианского. На самом деле такого года не существует. Давайте разбираться почему.

Часть 1. Месяцы

Сначала вспомним, сколько дней в каждом месяце:

ЯнвФевМартАпрМайИюньИюльАвгСенОктНоябДек
3128 / 2931303130313130313031

Теперь посмотрим, на сколько дней в каждом месяце больше, чем в четырёх неделях.

ЯнвФевМартАпрМайИюньИюльАвгСенОктНоябДек
30 / 13232332323

В этом месте возникает следующая идея. Если к дате прибавить 7 дней, то день недели не изменится. Работает модульная арифметика. Отсюда легко понять, что если дней в месяце на два больше, чем в четырёх неделях, то первое число следующего месяца сдвинется на два дня недели относительно первого числа текущего месяца. Да и вообще,

если в месяце (28 + N) дней, то первое число следующего месяца сдвинется на N дней относительно дня недели первого числа текущего месяца.

Например, в этом году январь начался во вторник, поэтому февраль начался в пятницу. Вт + 3 = Пт.
Насколько же сдвинут день недели первого числа некоторого месяца? Чтобы найти это, надо просуммировать «излишки» дней над четырьмя неделями во всех предыдущих месяцах. В таблице представлены сдвиги относительно дня недели на первое января. Первая строка для невисокосного года, вторая для високосного.

ЯнвФевМартАпрМайИюньИюльАвгСенОктНоябДек
0336811131619212426
0347912141720222527

Но это выглядит не очень показательно, да и мы знаем, что сдвиг на семь дней не меняет день недели. Поэтому запишем теперь в таблицу остатки от деления суммарных сдвигов на 7.

ЯнвФевМартАпрМайИюньИюльАвгСенОктНоябДек
033614625035
034025036146

Вот теперь другое дело! Ясно видно, как определить день недели на первое число любого месяца, если известен день недели на первое января. Надо просто прибавить сдвиг для интересующего месяца. Закономерность февраль-март-ноябрь я знаю ещё со школы, а другие не замечал.

Мы получили ответ на вопрос в начале статьи.

Так как для обоих вариантов года в таблице присутствуют все сдвиги от 0 до 6, то в любом году есть месяц, который начинается в какой-то определённый день недели.

Но теперь можно задавать другие вопросы. Например, «в каких годах такой месяц только один?» или «в какие года таких месяцев максимально много?». Для этого надо уметь определять день недели на первое января любого года.

Беременность по месяцам

Как только вы забеременеете, ваш малыш начнет расти и из совсем микроскопического зародыша за несколько месяцев превратится в карапуза ростом около полуметра. Темпы его роста во много раз превышают ваши темпы роста во время беременности.

Если вам не интересно читать о развитии малыша по неделям, то ниже — экспресс-обзор процессов, проходящих в организме ребенка по месяцам. Здесь мы совсем не будем затрагивать аспекты, касающиеся будущей мамы.

1-ый месяц беременности

После того как произошло зачатие, многоклеточная зигота опустилась вниз по маточной трубе и закрепилась в матке. Этот процесс прошел примерно за неделю. Но даже за этот короткий промежуток времени ребенок уже стал в 10000 раз больше тех клеток, из которых он «возник». К концу первого месяца беременности малыш уже размером с рисовое зернышко. Его мозг, спинной мозг и голова начали развиваться.

2-ой месяц беременности

На втором месяце плод состоит из трех «слоев». Первый из них — самый верхний — это эктодерма. Из нее будут формироваться кожа, волосы, нервная система, а также слизистые оболочки носа, ушей и рта малыша. Из второго слоя — под эктодермой — будут развиваться его сердце, мышцы, кости, кровь и репродуктивная система. Третий слой «трансформируется» в железы, язык, мочевой пузырь и желудочно-кишечный тракт вашего ребенка. Сердце ребенка формируется в первую очередь и начнет биться уже к концу второго месяца. Ваш ребенок на этом этапе будет размером приблизительно с кукурузное зернышко.

3-ий месяц беременности

На третьем месяце развиваются ногти ребенка, мочки ушей, руки, ноги, кисти рук, ступни ног, а также пальчики на руках и ногах. Также уже сформирован кишечник. Но сначала все это может показаться немного «недооформленным». Узнаваемым человеческое тельце станет только к концу месяца. В конце 3-его месяца ребенок будет весить примерно как тюбик губной помады. Еще одним важным «достижением» является то, что он уже в состоянии опорожнять свой мочевой пузырь в околоплодные воды.

4-ый месяц беременности

Четвертый месяц обычно ассоциируют с развитием половых органов ребенка. Малыш уже может мигать и сосать, а кожные покровы приобретают желтоватый оттенок. Ребенок также в состоянии перемещать зрачки и смотреть в разные стороны. К концу месяца его размер будет сопоставим с размером среднего банана.

5-ый месяц беременности

На этом сроке малыш уже в состоянии делать некоторые движения, которые вы будете чувствовать в матке. Формируются брови и ресницы. Небольшой пучок волос уже появится и на голове. Ребенок на 5-ом месяце беременности весит в среднем 450 граммов.

6-ой месяц беременности

Тело ребенка обволакивает белое вещество — первородная смазка. Оно помогает защитить малыша от ссадин и растрескивания кожи, которые могут возникнуть из-за длительного нахождения в амниотической жидкости. Если вы ожидаете девочку, в ее яичниках уже начнут формироваться яйцеклетки. Получается так, что вы не только ожидаете дочку, но и в ее организме уже все подготовлено для ваших будущих внуков и внучек. К концу месяца малыш удвоит свой вес — теперь он весит примерно 900 граммов.

7-ой месяц беременности

Итак, сейчас ваш ребенок может вас слышать. Он может реагировать на громкие звуки, а также на музыку. Вкусовые рецепторы почти полностью сформировалось. Малыш умеет сжимать кулачки и хватать вещи. К концу седьмого месяца ребенок будет весить около 1 кг 800 г.

8-ой месяц беременности

Все основные органы и системы уже развиты, остаются последние «штрихи». Зрачки ребенка уже в состоянии сужаться и расширяться при реагировании на свет. Легкие — это, пожалуй, последний крупный орган, который еще не до конца развит. Тем не менее малыш уже начал практиковаться в дыхании (пока что он дышит не кислородом, а амниотической жидкостью). Вес ребенка — около 2,2 кг.

Часть 2. Годы

Когда я учился программировать, а это было в 10 классе школы на PascalABC, одним из первых серьёзных заданий было реализовать процедуру, распечатывающую календарь на год, который передавался как аргумент. У нас были подсказки, какие функции для этого надо реализовать. В целом всё сводилось к подсчёту дней между двумя датами: эталонной и текущей, чтобы определить день недели на первое января нужного года.
Такой подход работал, но скорость зависела от того, насколько близко необходимый год к эталонному. Меня это расстраивало, но придумать что-то лучше я тогда не смог. Теперь же настал идеальный момент, чтобы до конца разобраться в этом.

Високосные года в григорианском календаре назначаются следующим образом:

  • год, номер которого кратен 400, — високосный
  • остальные года, номер которых кратен 100, — невисокосные
  • остальные года, номер которых кратен 4, — високосные
  • остальные года — невисокосные

Из этого описания видно, что цикл високосности имеет период в 400 лет. Но не ясно, будут ли такие четырёхсотлетние циклы начинаться в один и тот же день недели.
Заметим, что первое января от года к году смещается на один или два дня недели, и напишем

немного кода.

bool is_leap_year(int year) { if ((year % 400) == 0) return true; if ((year % 100) == 0) return false; if ((year % 4) == 0) return true; return false; } void first_weekdays_table() { ofstream file(«weekdays.txt», ios_base::out); int weekday = 3; for (int i = 1801; i <= 3000; ++i) { file << weekday; if ((i % 100) != 0) { file << » «; } else { file << endl; } weekday += is_leap_year(i) ? 2 : 1; weekday %= 7; } file.close(); }
Выводятся дни недели на первое января каждого года, с 1801 до 3000. Понедельник обозначается как «0», вторник как «1», и т. д. Представим всё в виде таблицы из двух полных четырёхсотлетних циклов и двух половинок. По горизонтали идут столетия, по вертикали года в этих столетиях. В ячейки на пересечении столетия и года написан день недели, в который этот год начался. Например, день недели, в который начался 1997 год, стоит на пересечении столбца «1900» и строки «97». Это среда. Полная версия таблицы:


,


. В таблице сразу можно заметить две вещи: четырёхсотлетние циклы действительно начинаются в один день недели (2001, 2401 и 2801 года; понедельник), а вместо 2000 года есть «тысяча девятьсот сотый». Последнее сделано нарочно, для дальнейшего удобства. Первый же факт позволяет нам без препятствий двигаться дальше.

В григорианском календаре все четырёхсотлетние циклы начинаются в понедельник.

Но самое интересное кроется в полной версии таблицы. Можно обнаружить, что каждое столетие внутри четырёхсотлетнего цикла состоит из повторяющегося двадцативосьмилетнего цикла:

0123560134561234601245602345

Первое столетие начинается со смещением по циклу, равным 0, второе со смещением 4, третье со смещением 8 и четвёртое со смещением 12. Именно для этого таблица представлена в виде, где в столетии есть «сотые» года и нет нулевых. Стоит сказать, что всего существует 14 различных вариантов года. В двадцативосьмилетнем цикле по одному разу на каждый день недели приходится начало високосного года и по три раза начало не високосного.

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

напишем ещё немного кода.

int get_weekday(int year, int month, int day) { int weekdays[] = {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}; int shift_not_leap[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5}; int shift_leap[] = {0, 3, 4, 0, 2, 5, 0, 3, 6, 1, 4, 6}; bool is_leap = is_leap_year(year); year -= 1; year %= 400; int century = year / 100; year %= 100; int index = (year + (4 * century)) % 28; int weekday = weekdays[index]; weekday += is_leap ? shift_leap : shift_not_leap; weekday += (day — 1); weekday %= 7; return weekday; }

Предсказания на месяц с Числом 7

Возможности в это число

Заприте двери и окна, отключите телефон, а на входную дверь повесьте табличку «Не беспокоить». В этом месяце вам никто не понадобится ни для каких целей. Что вам действительно необходимо, так это заняться самоанализом и разложить по полочкам свои устремления и надежды, а также наклеить ярлычки на цели и задачи.

Поддерживая минимальную внешнюю деятельность, бросьте все силы на ликвидацию внутренних проблем. За месяцы напряженного и плодотворного труда вы несколько подзабыли, с чего все начиналось, и (как следствие) могли потерять правильное направление движения. Для начала еще раз озвучьте конечные цели долговременных проектов, затем сформулируйте и распишите по пунктам задачи на ближайшее время, после чего проведите инвентаризацию ваших желаний (не изменились ли они в последнее время?). После этого убедитесь в наличии все еще существующих проблем и попробуйте ответить себе на вопросы: «Что меня конкретно не устраивает и почему я до сих пор не смог ничего изменить в лучшую сторону?».

Месяц числа семь – время, когда вам удастся получить у самого себя самые точные и самые откровенные ответы. Месяц числа семь – реальная возможность сойти с рельс инерции и бессмысленной суеты, не приносящей конкретных результатов. Что-то не получается? Перестаньте привычно биться разумом и телом о глухую стену и попробуйте найти дверь. А может быть, вам стоит вообще пойти в другую сторону? У французов есть замечательная поговорка: «Прыгай с той ступеньки, на которой стоишь», в русском языке это соответствует выражению: «Не пытайся выдавать желаемое за действительное, будь реалистом».

Прежде чем снова включиться в ежедневную борьбу за более комфортное место под солнцем, попробуйте четко определить параметры, соответствующие вашему понятию «комфорт». Не идите на поводу у людей, требующих от вас наивысших показателей по всем пунктам, – это физически невозможно. Лучше четко определите, в какой области вы действительно можете достичь значительных успехов, и направьте туда большую часть усилий. Давно известная и даже избитая истина «Если вы будете любить и понимать себя, это поможет другим людям понимать и любить вас» легко может стать девизом месяца числа семь.

Предостережения в число месяца 7

Во-первых и (по нашей грубой и материалистичной жизни) в-главных: могут возникнуть некоторые финансовые проблемы. Характер они могут иметь разный, а причину, скорее всего, одну – вы на время ослабили контроль. Ничего существенного, но лучше плотнее придерживать кошелек в общественном транспорте, не давать в долг людям, известным своей забывчивостью, проверять чеки в магазинах и совершать покупки в ясном уме и трезвой памяти.

Во-вторых, вас может постичь внезапный приступ рассеянности, поэтому перед выходом из дома проверяйте два раза, выключили ли вы утюг; перед тем как взять в руки интересную книгу, снимите с плиты все кастрюли и сковородки; выходя из квартиры, проверьте наличие ключей и денег; вылезая из такси, проверяйте, не оставили ли вы в авто сотовый телефон или зонтик. Ну и так далее…

Характеристики месяца

Склонность к самоанализу, уединение, исследование, сопоставление, стремление к совершенству, рассеянность внимания, познание.

Переходите на энергосберегающий режим. Никаких лишних всплесков активности. Строго дозируйте количество усилий, приложенных к решению той или иной проблемы. Попробуйте максимально уменьшить внешнюю активность, иначе у вас может резко снизиться жизненный тонус.

Цвета успеха в этом месяце: фиолетовый, пурпурный, бирюзовый.

Максим Федоров

Часть 3. Итоги

С помощью всего двух таблиц можно определить день недели для любой даты, не используя при этом опорных дат.

Последовательность дней недели на первое января в двадцативосьмилетнем цикле:

0123560134561234601245602345

И таблица смещений дней недели на первое число каждого месяца для невисокосного и високосного годов:

ЯнвФевМартАпрМайИюньИюльАвгСенОктНоябДек
033614625035
034025036146

Во время написания статьи, я нашёл на Хабре две схожие по тематике: раз и два. Автор первой с помощью специальной таблицы показывает, как найти в уме день недели для дат в XX и XXI веках. Представленная им таблица содержит 56 чисел. Предложенный в статье алгоритм использует таблицу дней недели и две таблицы смещений, содержащие (28 + 2*12) = 52 числа, которые необходимо запомнить. Весь исходный код лежит на GitHub’е.

Интересный факт: с 1 по 13 февраля 1918 года в Советской России не родился ни один человек.

Задавайте себе вопросы с утра по воскресеньям =)

Обновление от 03.07.2019 (среда)

Если представить двадцативосьмилетний цикл в виде таблицы, 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 то становится понятно, как можно вычислить смещение дня недели на первое января: weekday = (index + (index / 4)) % 7; С учётом этого, а также того, что смещения для месяцев в високосном году можно вычислить через смещения в невисокосном, напишем
следующую функцию

int get_weekday_c(int year, int month, int day) { int shifts[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5}; int shift = shifts; if (is_leap_year(year) and (month > 2)) { shift += 1; }; year = (year — 1) % 400; int century = year / 100; int index = ((4 * century) + (year % 100)) % 28; int weekday = (index + (index / 4)) + shift + (day — 1); return (weekday % 7); }

Таким образом, можно вычислить день недели для любой даты, зная всего лишь 12 чисел: смещения дней недели на первое число каждого месяца.

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями: