В ИТ-стартапе тимлид решил поднять производительность и сказал, что с сегодняшнего дня будет давать задачи сразу на неделю. Мидлы получат по 17 задач, джуниоры по 12, а если у кого есть дополнительный проект — то ещё по 9 задач сверху. После митапа выяснилось, что в таск-трекере появилось 305 новых задач, потому что доппроект был у каждого третьего.
А теперь вопрос — сколько всего программистов работает в стартапе?
Обозначим количество джуниоров за d, а количество мидлов — за m. Получается, что всего они получили 17m + 12d задач. Теперь посчитаем количество дополнительных проектов — их ровно треть от общего количества программистов: (m + d) / 3. Соответственно, задач по ним будет 9 × (m + d) / 3 = 3(m + d).
Складываем всё вместе, чтобы получить 305 задач:
17m + 12d + 3(m + d) = 305
17m + 12d + 3m + 3d = 305
20m + 15d = 305 ← разделим это на 5
4m + 3d = 61
m = (61 − 3d) / 4
Теперь зайдём с другой стороны — с количества человек в каждой категории. Так как количество людей — это целое число, то нам нужно найти все целочисленные решения этого уравнения. Не будем искать хитрых решений, а сделаем всё в лоб, перебором. Иногда так быстрее.
Посмотрим на все решения, которые получаются, если мы будем подставлять вместо d целые числа в (61 − 3d) / 4:
d = 0 → m = 61/4 = 15,25 — не подходит, потому что не целое число;
d = 1 → m = 58/4 = 14,5 — тоже не подходит;
d = 2 → m = 55/4 = 13,75 — и это не подходит;
d = 3 → m = 52/4 = 13 — а вот это подходит, отложим отдельно.
Так проверяем до тех пор, пока у нас не получится единица — это значит, что все числа выше будут давать в результате деления что-то меньше единицы, а это нам не подходит.
Выпишем после этого все решения, которые дают нам целые числа:
d = 3 → m = 52/4 = 13
d = 7 → m = 40/4 = 10
d = 11 → m = 28/4 = 7
d = 15 → m = 16/4 = 4
d = 19 → m = 4/4 = 1
Всё, больше 19 нет смысла проверять — результат деления будет меньше единицы.
Но у нас есть ещё одно неявное условие — дополнительные проекты были у каждого третьего. Это значит, что общее количество программистов должно нацело делиться на три. Проверим, какие пары d и m соответствуют этому условию:
d = 3, m = 13 → (3 + 13)/3 = 5,33
d = 7, m = 10 → (7 + 10)/3 = 5,66
d = 11, m = 7 → (11 + 7)/3 = 6
d = 15, m = 4 → (15 + 4)/3 = 6,33
d = 19, m = 1 → (19 + 1)/3 = 6,66
Выходит, что только одна пара попадает под это условие — 11 и 7. Получается, всего в стартапе было 11 + 7 = 18 программистов.