Задача: баг или фича?

Сколько времени потребуется программисту, чтобы запилить весь проект?

Задача: баг или фича?

В работе у программиста есть проект, в котором нужно пофиксить три бага и добавить три фичи. За час программист может пофиксить 1–2 бага или добавить 1–2 фичи. Но он постоянно отвлекается на форумы и соцсети, поэтому каждый час работа идёт так:

  • Если он пофиксит один баг, то вылезут два новых.
  • Если он пофиксит за час сразу два бага, то в трекере появится задание сделать ещё одну новую фичу, и не факт, что она войдёт в финальный релиз.
  • Если он добавит одну фичу, то в трекере появится запись, что ему обязательно нужно добавить ещё одну фичу, но попроще, и без этого проект не сдать.
  • И только если он за час добавит сразу две фичи, то новых задач не прибавится.

Сколько минимально времени потребуется программисту, чтобы сдать проект без багов и с пустым трекером задач?

Единственное действие, при котором не появляется новых багов и фич — это когда программист за час добавляет сразу две фичи. Получается, что для успешного завершения нужно сделать чётное количество фич подряд — 2, 4, 6, 8 или что-то подобное.

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

Нечётное количество фич — это 1, 3, 5 и так далее. Если мы закроем сразу два бага, то это даст нам только одну новую фичу в трекере, и останется ещё один баг. Делаем это за первый час:

Исходные данные: 3 бага, 3 фичи.

Час 1: 1 баг, 4 фичи (пофиксили 2 бага, получили +1 фичу в трекере).

У нас появилось чётное количество фич, которые можно сразу попарно закрыть. Тратим ещё 2 часа.

Час 2: 1 баг, 2 фичи (реализовали сразу 2 фичи, новых заданий не появилось).

Час 3: 1 баг (реализовали сразу 2 фичи, новых заданий не появилось).

Уже хорошо. Теперь единственное, что остаётся программисту — отработать этот баг.

Час 4: 2 бага (пофиксили 1 баг, получили 2 новых).

А вот тут можно попасть в ловушку, если сразу пофиксить 2 бага и получить фичу. Дело в том, что если остаётся только одна фича, то после её выполнения в трекере появляется запись, что нужно сделать ещё одну. Получается бесконечный цикл. Значит, нам нужно фиксить по одному багу по очереди.

Час 5: 3 бага (пофиксили 1 баг, получили 2 новых).

Ага, у нас уже 3 бага, а это значит, что можно сделать одновременно 2 из них, и не попасть потом в замкнутый круг. Проверим.

Час 6: 1 баг, 1 фича (пофиксили 2 бага, получили +1 фичу в трекере).

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

Час 7: 2 бага, 1 фича (пофиксили 1 баг, получили 2 новых).

Час 8: 2 фичи (пофиксили 2 бага, получили +1 фичу в трекере).

И снова появилось чётное количество фич, которые нужно сделать. Закрываем проект финальным шагом.

Час 9: всё сделано (реализовали сразу 2 фичи, новых заданий не появилось).

Ответ: программисту потребуется минимум 9 часов.

Обложка:

Даня Берковский

Корректор:

Ирина Михеева

Вёрстка:

Маша Климентьева

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

Эту задачу могут решить только люди с абстрактным мышлением

easy
Задача про безумного рекрутера и большой офис
Задача про безумного рекрутера и большой офис

Вот что бывает, когда начинаешь бесконтрольно нанимать людей, — внезапно заканчивается место в офисе.

easy
Как взорвать ракету одной переменной
Как взорвать ракету одной переменной

Краткий мастер-класс по правильному объявлению типов данных.

easy
Самые интересные задачи на логику
Самые интересные задачи на логику

Каверзные задачи с хитрыми решениями.

medium
Головоломки для ИТ-собеседований
Головоломки для ИТ-собеседований

Четыре метода, которые помогают с решением.

easy
Сложная задачка на логику и математику: пассажиры в вагоне
Сложная задачка на логику и математику: пассажиры в вагоне

Задача про внутренний туризм

easy
Лучшие задачи на аналитику и вероятности
Лучшие задачи на аналитику и вероятности

Вероятно, это лучшие аналитические задачи

medium
Задачка от Джеффа Безоса. На размышление даётся 30 секунд
Задачка от Джеффа Безоса. На размышление даётся 30 секунд

Считается, что её могут дать на собеседовании в «Амазон».

hard
Два аналитика, два неизвестных, две минуты
Два аналитика, два неизвестных, две минуты

Задачка на математику и логику.

easy
easy