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

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

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

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

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

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

Решение

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

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

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

    
language: 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)


Ско­пи­ро­вать код
Код ско­пи­ро­ван

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

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