medium

Решаем кодом задачу про безумного рекрутера

Пусть рассудит машина.

У нас есть задача про безумного рекрутера, которую мы решили чистой математикой. Давайте теперь используем мощь компьютеров, чтобы получить правильный ответ (и сэкономить время).

Задача звучит так.

В одной крупной технологической компании появился безумный рекрутер, который нанимал на работу только джуниоров. У него был хитрый план — заполнить ими весь офис и получить за это премию от начальства. Чтобы это сделать, он каждый день нанимал столько же людей, сколько уже работает в офисе. Грубо говоря, удваивал число джуниоров.

Когда он только начинал, в старом офисе работал всего один джуниор, но 30 дней спустя все рабочие места в офисе были полностью заняты напуганными, ничего не понимающими джуниорами.

В новом, точно таком же по размеру офисе с первого дня работает в 2 раза больше людей, чем на старте в старом — целых 2 джуниора вместо одного. Сколько времени уйдёт у безумного рекрутера на то, чтобы заполнить новый офис и получить свою квартальную премию?

В прошлый раз мы разбирали степени двойки, находили закономерности и раскидывали мозгами. Но что если просто записать по шагам, что происходило в офисах, а потом перевести это на язык Python? Вот о чём говорится в задаче:

  1. У нас на старте был один джуниор.
  2. Через 30 дней ими был заполнен весь офис.
  3. Каждый день в течение этого времени…
  4. …безумный рекрутер удваивал количество джуниоров.
  5. У нас есть точно такой же по размеру новый офис, в котором на старте работало уже два джуниора.
  6. Мы не знаем, сколько дней это заняло, но…
  7. …пока количество новых джуниоров не сравнялось с их количеством в старом офисе…
  8. …он каждый день снова удваивал их.
  9. И это заняло сколько-то дней, что нам и нужно выяснить.

Мы всего лишь повторили описание задачи, но на самом деле у нас уже есть готовый каркас программы. Переведём на Python все пункты по очереди, с нумерацией и комментариями:

# 1. Сколько джуниоров было на старте в старом офисе
junior = 1
# 2. Сколько дней ушло на заполнение старого офиса
day = 30
# Сделаем диапазон для цикла
month = range(1,day)
# 3. Каждый день в старом офисе…
for current_day in month:
    # 4. …удваивалось количество джуниоров 
    junior = junior * 2
# 5. В новом офисе у нас уже два джуниора на старте
new_junior = 2
# 6. Заведём переменную для подсчёта дней в новом офисе
new_day = 0
# 7. Пока в новом офисе не станет столько же людей, как и в новом…
while new_junior <= junior:
    # 8. …мы удваиваем количество джуниоров в новом офисе…
    new_junior = new_junior *2
    # 9. …и считаем каждый прошедший день
    new_day = new_day + 1
# Выводим количество дней, через сколько мы заполним новый офис
print(new_day)

Алгоритмы — сила. Скоро разберём ещё задачек, будет интересно.

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

Попробуйте бесплатное в «Яндекс Практикуме»
В «Яндекс Практикуме» есть бесплатные курсы, на которых можно получить полезные навыки для работы в ИТ: от Git и Excel до основ Python и облачных технологий.
Учиться бесплатно
Попробуйте бесплатное в «Яндекс Практикуме» Попробуйте бесплатное в «Яндекс Практикуме» Попробуйте бесплатное в «Яндекс Практикуме» Попробуйте бесплатное в «Яндекс Практикуме»
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
medium