Много людей, у которых график работы сменный. Проблема такого графика – сложность быстро посчитать для любой даты какой это день: рабочий или выходной. Есть много онлайн сервисов для расчета сменного графика, но еще проще это сделать в уме. В этой статье будет рассмотрен алгоритм расчета в уме для любого сменного графика.
Как и в статье «Вычисление дня недели в уме», в основе алгоритма будут смещения месяцев.
В статье будет рассматриваться график работы 3/3. Т.е. «неделя» в нашем случае будет длиться 6 дней:
Рабочий день 1
Рабочий день 2
Рабочий день 3
Выходной день 1
Выходной день 2
Выходной день 3
Самое важное – не ошибиться при расчете смещения для первого месяца в году. Все последующие месяцы будут зависеть от этого.
Для примера, пусть первый рабочий день в году будет 2 января, т.е. 2, 3 и 4 января – рабочие, соответственно 5, 6, 7 – выходные дни.
В моем случае было так
31 декабря — Рабочий день 1
3 января — Рабочий день 2
4 января — Рабочий день 3
Поэтому для упрощения расчетов допустим, что 2, 3, 4 января – рабочие дни.
Это важно для расчета смещения для января.
3 января — Рабочий день 2
4 января — Рабочий день 3
Поэтому для упрощения расчетов допустим, что 2, 3, 4 января – рабочие дни.
Это важно для расчета смещения для января.
Из вышесказанного получаем календарь для января:
где зеленые ячейки – рабочие дни, красные – выходные.
Количество дней в строке равно количеству дней в нашей «неделе», в нашем примере равно 6.
1 января – Выходной день 3;
2 января — Рабочий день 1 (начало «недели»).
Перед первым днем месяца 5 пустых желтых ячеек, это значит, что смещение для января в нашем случае будет равно 5.
Продолжая, получаем календарь для февраля (невисокосный год):
как видим, смещение для февраля равно 0, т. к. месяц начинается первым рабочим днем.
Далее для марта:
Смещение для марта равно 4, а для апреля – 5, т. к. первое апреля приходится на 6-й день «недели», и перед ним будет 5 пустых квадратов.
Далее считаем до нужного нам месяца.
В моем случае смещения для первых 6 месяцев будут:
5, 0, 4, 5, 5, 5 – январь, февраль, март, апрель, май и июнь. Запомнить 6 цифр не составляет труда.
Чтобы рассчитать, рабочий день это или выходной, нужно к дате прибавить смещение месяца и найти остаток от деления на продолжительность «недели»: В зависимости от остатка определяем день:
1, 2 и 3 – рабочие дни
4, 5 и 0 – выходные дни
Например, для 23 февраля: 23 (дата) + 0 (смещение февраля) = 23. Остаток 23 % 6 = 5, это второй выходной.
Для 8 марта: 8 (дата) + 4 (смещение для марта) = 12. 12 % 6 = 0. Это значит, что 8 марта – последний выходной день, 9 марта на работу.
Еще один пример для закрепления:
22 апреля + 5 (смещение для апреля) = 27, остаток от деления на 6 равен 3 – последний рабочий день.
Недостатком алгоритма является нарушение графика после отпуска: таблицу смещений надо пересчитывать или брать отпуск с таким расчетом, чтобы график не нарушался. Например, если взять отпуск после 3 рабочего дня на «количество рабочих дней подряд» * «нечетное число» дней (3, 9, 15, 21 дней отпуска), то график рассмотренный в статье не нарушится.
Пользуясь данным алгоритмом, можно вычислить любой день в уме за несколько секунд, никаких календарей и онлайн-сервисов.
SignallerK
А подойдет ли подобная схема для классического графика с ночным сменами?
1. 12 часов смена -в день (1й день)
2. 24 часа отдых
3. 12 часов смена ночь (2 й с переходом на третий день)
4. 36 часов отдыха (3-4й день)
damirg Автор
Эта схема для такого графика не подойдет. Интересная задача, надо будет подумать как это реализовать.
Nemiroz
Если я правильно понимаю — 4 блок должен быть 48 часов, тогда можно использовать схему из статьи, но бить не на 6 дней в неделю, а на 4.
damirg Автор
Можно попробовать разделить каждый день еще на 2 — по 12 часов. Тогда «неделя» получится из 7 «дней» по 12 часов. Тогда должно получиться.
SignallerK
Точно вы правы 4й блок 48 часов. Че то я себя обделил :).
n0wheremany
Стоит добавить, что кроме работы в 2 смены (ваш пример), есть работа в 4 смены [Четыре смены по 8 часов, в ночь (с 23-х до 7-ми утра), после – 2 выходных. 4-х дневка (с 7 утра до 15.00), затем выходной. 4 вечерних выхода (с 15.00 до 23.00), далее – полный выходной], а так же в 5 [Двойная дневная смена (8 утра -16.00), затем выходные (48 часов). Двойная вечерняя (16.00-24.00) и выходной (не менее 24 часа). 2 дня в ночь (00.00-8.00) и выходные не менее чем 72 часа.]