Код
#Тесты

Задача про директора и график смен программистов

Логическая задача на метод исключения. Разбираемся с репетитором.

Roungroat/ Rawpixel / Annie для Skillbox

Анна Никитина

Преподаватель математики, автор YouTube-канала «Математика с Аней» и соавтор учебников и методических рекомендаций к учебникам по математике.

Анна готовит учеников к ЕГЭ в школе «Топскул» и консультирует онлайн-школы по вопросам эффективного обучения.

Условие

Директор IT-стартапа нанял пятерых программистов, которые поочерёдно обслуживают проект по графику 2/8 — два дня кодят и восемь отдыхают. Когда программисты не заняты в проекте, они работают по найму в других компаниях.

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

По просьбе директора каждый разработчик прислал даты, в которые он может выйти на смену:

  • Первый программист: 14–15-е.
  • Второй программист: 10–11-е или 16–17-е.
  • Третий программист: 12–13-е или 18–19-е.
  • Четвёртый программист: 12–13-е или 16–17-е.
  • Пятый программист: 10–11-е или 14–15-е.

Помогите директору построить график так, чтобы вовремя сдать проект.

Подсказка

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

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

Решение

Шаг №1. Перенесём данные из условия задачи в таблицу и отметим дни, в которые каждый из пяти программистов может выйти на работу. Дни удобно сбиваются в пары, поэтому таблицу можно упростить. Сделаем 5 столбцов вместо 10:

Шаг №2. Начинаем постепенно перекрашивать ячейки в зелёный и красный цвета:

  • Зелёным мы отметим дни, в которые программист выйдет на смену.
  • Красный будет отвечать за дни, которые мы исключим из рабочего графика.

Первый программист может отработать только с 14-го по 15-е число. Поскольку другой возможности поработать у первого программиста нет, отдаём смены 14-го и 15-го числа ему:

Шаг №3. Переключаемся на пятого программиста, у которого после предыдущего исключения остался только один свободный промежуток — 10-е и 11-е число:

Шаг №4. Теперь мы видим, что 18-го и 19-го числа у нас свободен только третий программист:

Шаг №5. У второго программиста остался единственный слот 16-го и 17-го числа:

Шаг №6. По остаточному принципу закрепляем за четвёртым программистом 12-е и 13-е число и заканчиваем формировать график:

Ответ

По новому графику программисты выйдут на смену в следующие даты: первый — 14–15-го; второй — 16–17-го; третий — 18–19-го; четвёртый — 12–13-го; пятый — 10–11-го.


Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована