Планета магии. Заговоры, амулеты, гадания

Сколько дней в мае месяце. Как отдохнуть на майские праздники

(Часть I ), а также авторским к нему дополнением (Часть II ). Не следует относиться к материалу серьёзно, а скорее как к разминке для ума, требующей не более чем школьных знаний арифметики и не имеющей практического применения. Всем приятного чтения!

Часть I

Вступление

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

Формализуя Другими словами, необходимо найти функцию f , такую, что значение f(x) для каждого месяца x , представленного числом от 1 до 12, равняется количеству дней в этом месяце. Таблица значений аргумента и функции :

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Если у вас возникло желание попробовать самому до прочтения моего решения, то сейчас самое время. Если же вы предпочитаете немедленно увидеть готовый ответ, то посмотрите под спойлер.

Ответ


Ниже следуют мои шаги по нахождению решения.

Математический аппарат

Сначала бегло освежим в памяти два жизненно необходимых в решении этой задачи оператора: целочисленное деление и остаток от деления.

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

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

Замечу, что остаток от деления имеет равный с делением приоритет.

Основы

Итак, применим наш математический аппарат для получения базовой формулы. В обычном месяце 30 или 31 день, так что мы можем использовать для получения поочерёдно 1 или 0, а затем просто прибавить к этому числу константу:

Получаем таблицу, полужирным выделены корректные значения:
x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 30 31 30 31 30

Неплохое начало! Уже есть правильные значения для января и для месяцев с марта по июль включительно. Февраль - особый случай, и с ним мы разберёмся чуть позже. После июля для оставшихся месяцев порядок получения 0 и 1 должен быть изменён на обратный.
Для этого мы может прибавить к делимому 1:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 30 31 30 31 30 31 30 31 30 31 30 31

Теперь правильные значения с августа по декабрь, но, как и предполагалось, значения для прочих месяцев неверны. Давайте посмотрим как мы можем объединить эти формулы.

Наложение маски

Для этого необходима кусочно-заданная функция, но - так как мне это показалось скучным - я задумался о другом пути решения, использующем одну часть функции на одном интервале, другую - на другом.
Полагаю, что проще всего будет найти выражение, равное 1 в одной области применения и 0 - в остальной. Метод, в котором умножая аргумент на выражение мы исключаем его из формулы вне области его применения, я назвал «наложением маски», потому такое поведение подобно некой битовой маске.
Для применения этого метода в последней части нашей функции необходимо найти выражение, равное 1 при , и - так как значения аргумента всегда меньше 16 - для этого прекрасно подходит целочисленное деление на 8.
x 1 2 3 4 5 6 7 8 9 10 11 12
x ⁄ 8 ⌋ 0 0 0 0 0 0 0 1 1 1 1 1

Теперь с помощью этой маски, используя в делимом выражение вместо 1, мы можем заменить порядок получения 0 и 1 формуле на обратный:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 30 31 30 31 30 31 31 30 31 30 31

Эврика! Всё правильно, кроме февраля. Сюрприз-сюрприз.

Февраль

В любом месяце 30 или 31 день, кроме февраля с его 28 (високосный год выходит за рамки этой задачи). На текущий момент по нашей формуле в нём 30 дней, поэтому неплохо бы вычесть выражение, равное 2 при .
Лучшее что мне удалось придумать это , что накладывает маску на все месяцы после февраля:
x 1 2 3 4 5 6 7 8 9 10 11 12
2 mod x 0 0 2 2 2 2 2 2 2 2 2 2

Изменив базовую константу на 28 с добавлением 2 к остальным месяцам получим формулу:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 29 28 31 30 31 30 31 31 30 31 30 31

К сожалению, январь теперь короче на 2 дня. Но, к счастью, получить выражение, которое будет применяться только для первого месяца очень легко: это округлённое вниз обратное к число. Умножив его на 2 получаем окончательную формулу:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x) 31 28 31 30 31 30 31 31 30 31 30 31

Послесловие

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

Function f(x) { return 28 + (x + Math.floor(x/8)) % 2 + 2 % x + 2 * Math.floor(1/x); }

Часть II

Вступление

В первой части была получена короткая и даже немного изящная формула, основными достоинствами которой являются простота математического аппарата, отсутствие ветвлений и условных выражений, лаконичность. К недостаткам - кроме того, что вы не будете применять её в вашем проекте - можно отнести отсутствие проверки на вискокосный и не високосный год.
Поэтому я поставил перед собой задачу создать функцию f , такую, что значение f(x, y) для каждого месяца x , представленного числом от 1 до 12 и года y , большего 0, равняется количеству дней в месяце x в году y .
Для нетерпеливых под спойлером находится готовый ответ, остальных же прошу следовать за мной.

Ответ

Остаток от деления: mod и ⌊⌋

Для визуальной наглядности договоримся, что в некоторых формулах оператор деления с остатком заменён нижними скобками, там где это показалось мне необходимым:

Високосный год

В високосный год вводится дополнительный день календаря: 29 февраля. Как известно, високосным является год, кратный 4 и не кратный 100, либо кратный 400. Запишем тождественное этому высказыванию выражение:

Для приведения этого выражения в алгебраическое, необходимо применить к результату выражения инъекцию вида:

Что позволит получить 1 при делении без остатка и 0 при делении с остатком, чтобы использовать её в формуле определения количества дней в месяце.

В качестве функции g" можно использовать 1 минус остаток от деления для :

x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) Infinity 1 0 0 0 0 0 0 0 0 0 0 0 0 0

Легко заметить, что увеличив делимое и делитель на 1 мы получим правильную формулу при :
x 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
g"(x) 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Таким образом выражение запишем как:


А выражение запишем как:

Применяя этот подход получим следующую функцию g(y) , значением которой будет 1, если год високосный, или 0 в обратном случае:

y 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
g(y) 0 0 1 0 0 0 1 0 0 0 1
y 2000 2100 2200 2300 2400 2500 2600 2700 2800 2900 3000
g(y) 1 0 0 0 1 0 0 0 1 0 0

Полужирным выделены високосные года.

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

Наложение маски

В формуле часть является поправкой, прибавляющей 2 дня к январю. Если убрать множитель 2 и в числителе заменить 1 на 2, тогда эта формула будет прибавлять 2 дня к январю и 1 день к февралю, что даёт нам ключ к добавлению дня в високосном году. Для наглядности используем в формуле промежуточное значение g(y) и в качестве y используем 2000 (високосный) и 2001 (не високосный) годы:

Или:

x 1 2 3 4 5 6 7 8 9 10 11 12
f(x, 2000) 31 29 31 30 31 30 31 31 30 31 30 31
f(x, 2001) 31 28 31 30 31 30 31 31 30 31 30 30

Заключение

В результате получена уже значительно более громоздкая, но более универсальная формула, которую также можно использовать для получения количества дней в месяце определённого года:

Function f(x, y) { return 28 + ((x + Math.floor(x / 8)) % 2) + 2 % x + Math.floor((1 + (1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1))) / x) + Math.floor(1/x) - Math.floor(((1 - (y % 4 + 2) % (y % 4 + 1)) * ((y % 100 + 2) % (y % 100 + 1)) + (1 - (y % 400 + 2) % (y % 400 + 1)))/x); }
Пример на C# ideone.com/fANutz .

1 . Я не умею пользоваться подобной мнемоникой, поэтому подсмотрел табличку в интернете.
2 . «Основы», или «Правило С Многими Исключениями», как и большинство правил.
3 . Изначально в римском календаре февраль был последним месяцем года, поэтому есть логика в том, что он короче всех остальных. Также есть логика в добавлении или удалении дня именно в конце года, поэтому его длина является переменной.

Upd. 1:
Альтернативный перевод первой части в

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

Производственный календарь – это важный помощник в работе бухгалтера! Информация, представленная в производственном календаре, поможет вам избежать ошибок при начислении заработной платы, облегчит расчет рабочих часов, больничного или отпуска.

Календарь на 2019 год покажет праздничные даты, расскажет о переносе выходных и праздничных дней в текущем году.

На одной страничке, оформленной в виде календаря с комментариями, мы постарались собрать всю основную информацию, востребованную в вашей работе ежедневно!

Настоящий производственный календарь подготовлен на основе постановления П равительства РФ от 1 октября 2018 г. № 1163 " "

Первый квартал

ЯНВАРЬ ФЕВРАЛЬ МАРТ
Пн 7 14 21 28 4 11 18 25 4 11 18 25
Вт 1 8 15 22 29 5 12 19 26 5 12 19 26
Ср 2 9 16 23 30 6 13 20 27 6 13 20 27
Чт 3 10 17 24 31 7 14 21 28 7* 14 21 28
Пт 4 11 18 25 1 8 15 22* 1 8 15 22 29
Сб 5 12 19 26 2 9 16 23 2 9 16 23 30
Вс 6 13 20 27 3 10 17 24 3 10 17 24 31
январь февраль март I кв.
Количество дней
Календарные 31 28 31 90
Рабочие 17 20 20 57
Выходные, праздники 14 8 11 33
Рабочее время (в часах)
40-часов. неделя 136 159 159 454
36-часов. неделя 122,4 143 143 408,4
24-часов. неделя 81,6 95 95 271,6

Второй квартал

АПРЕЛЬ МАЙ ИЮНЬ
Пн 1 8 15 22 29 6 13 20 27 3 10 17 24
Вт 2 9 16 23 30* 7 14 21 28 4 11* 18 25
Ср 3 10 17 24 1 8* 15 22 29 5 12 19 26
Чт 4 11 18 25 2 9 16 23 30 6 13 20 27
Пт 5 12 19 26 3 10 17 24 31 7 14 21 28
Сб 6 13 20 27 4 11 18 25 1 8 15 22 29
Вс 7 14 21 28 5 12 19 26 2 9 16 23 30
апрель май июнь II кв. 1-е п/г
Количество дней
Календарные 30 31 30 91 181
Рабочие 22 18 19 59 116
Выходные, праздники 8 13 11 32 65
Рабочее время (в часах)
40-часов. неделя 175 143 151 469 923
36-часов. неделя 157,4 128,6 135,8 421,8 830,2
24-часов. неделя 104,6 85,4 90,2 280,2 551,8

Третий квартал

ИЮЛЬ АВГУСТ СЕНТЯБРЬ
Пн 1 8 15 22 29 5 12 19 26 2 9 16 23/30
Вт 2 9 16 23 30 6 13 20 27 3 10 17 24
Ср 3 10 17 24 31 7 14 21 28 4 11 18 25
Чт 4 11 18 25 1 8 15 22 29 5 12 19 26
Пт 5 12 19 26 2 9 16 23 30 6 13 20 27
Сб 6 13 20 27 3 10 17 24 31 7 14 21 28
Вс 7 14 21 28 4 11 18 25 1 8 15 22 29
июль август сентябрь III кв.
Количество дней
Календарные 31 31 30 92
Рабочие 23 22 21 66
Выходные, праздники 8 9 9 26
Рабочее время (в часах)
40-часов. неделя 184 176 168 528
36-часов. неделя 165,6 158,4 151,2 475,2
24-часов. неделя 110,4 105,6 100,8 316,8

Четвертый квартал

ОКТЯБРЬ НОЯБРЬ ДЕКАБРЬ
Пн 7 14 21 28 4 11 18 25 2 9 16 23/30
Вт 1 8 15 22 29 5 12 19 26 3 10 17 24/31*
Ср 2 9 16 23 30 6 13 20 27 4 11 18 25
Чт 3 10 17 24 31 7 14 21 28 5 12 19 26
Пт 4 11 18 25 1 8 15 22 29 6 13 20 27
Сб 5 12 19 26 2 9 16 23 30 7 14 21 28
Вс 6 13 20 27 3 10 17 24 1 8 15 22 29
октябрь ноябрь декабрь IV кв. 2-е п/г 2019 г.
Количество дней
Календарные 31 30 31 92 184 365
Рабочие 23 20 22 65 131 247
Выходные,праздники 8 10 9 27 53 118
Рабочее время (в часах)
40-часов. неделя 184 160 175 519 1047 1970
36-часов. неделя 165,6 144 157,4 467 942,2 1772,4
24-часов. неделя 110,4 96 104,6 311 627,8 1179,6

* Предпраздничные дни, в которые продолжительность работы сокращается на один час.

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

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

  • выходные и праздничные дни
  • предпраздничные дни
    (с сокращенным рабочим днем на 1 час)
Пн Вт Ср Чт Пт Сб Вс
30 1 2 3 4 5 6
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3

Нормы рабочего времени

Как отдыхаем на майские праздники в 2018 году

В мае 2018 года 11 праздничных и выходных дней:

  • 29 апреля, вс. - выходной
  • 30 апреля, пн. - перенесенный выходной с 28 апреля (сб.)
  • 1 мая, вт. - Праздник Весны и Труда, официальный нерабочий праздничный день (ст. 112 Трудового кодекса РФ)
  • 2 мая, ср. - перенесенный праздничный выходной с 7 января (вс.).

Как отдыхаем на 9 мая

На вторые майские праздники россияне отдыхают 1 день:

Ср
9
  • 9 мая, ср. - День Победы, официальный нерабочий праздничный день (ст. 112 Трудового кодекса РФ).

Как работаем в мае

В мае 2018 года россияне трудятся 20 дней:

Чт Пт Пн Вт Чт Пт Пн Вт Ср Чт Пт Пн Вт Ср Чт Пт Пн Вт Ср Чт
3 4 ... 7 8 ... 10 11 ... 14 15 16 17 18 ... 21 22 23 24 25 ... 28 29 30 31

8 мая - предпраздничный день с сокращенным рабочим временем на один час (ст. 95 Трудового кодекса РФ).

Нормы рабочего времени

Согласно производственному календарю России, в мае 2018 года в стране 20 рабочих (в том числе 1 сокращенный) и 11 выходных и праздничных дней.

Нормы продолжительности рабочего времени:

  • при 40-часовой рабочей неделе – 159 часов (20 x 8 - 1, где 20 – количество рабочих дней, 8 – длительность рабочей смены, 1 – количество сокращенных рабочих дней);
  • при 36-часовой – 143 часа (20 x 7,2 - 1);
  • при 24-часовой – 95 часов (20 x 4,8 - 1).

Как отдохнуть на майские праздники

Майские праздники - пора отдыха на природе. В это время года на улице уже устанавливается теплая погода, цветут цветы и деревья.

Любители активного отдыха могут поехать семьей или с друзьями к речке, в лес или на дачу. Там можно приготовить еду на огне, поиграть в игры, попеть песни под гитару.

Желающие отдохнуть в городе могут устроить культурно-развлекательную программу: сходить в кинотеатр или театр, посетить музеи или выставки, организовать шопинг.

Любители путешествий могут спланировать поездку в другой город России: Москву, Санкт-Петербург, Казань, Суздаль, Ялту или организовать заграничный тур в Турцию, Чехию, Грузию, Францию, Италию.

В официальные праздничные дни (1 и 9 мая) жителям городов предоставляется возможность отведать концерты с участием известных исполнителей, которые проходят на площадях.

Лучшие статьи по теме