Нужно написать код на python.
сколько времени потребуется программисту, чтобы запилить весь проект?
в работе у программиста есть проект, в котором нужно пофиксить три бага и добавить три фичи. за час программист может пофиксить 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 часов.