easy

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

Вся программа — 9 строк.

У нас когда-то была задача про сколковских наноботов и о том, захватят ли они мир. Тогда мы решили её в теории, и на это у нас ушла почти страница текста. На этот раз мы используем силу программирования и решим эту задачу на Python.

Сама задача звучит так:

Нашу планету ровным слоем покрывает большая колония бактерий, они находятся буквально везде. Неожиданно в Сколкове изобретают высокотехнологичных наноботов, которые имеют способность самовоспроизводиться при съедании этих бактерий. Каждую секунду сколковский нанобот пожирает одну бактерию и сразу делится на два таких же нанобота. Бактерии просто питаются подножным кормом и тоже каждую секунду делятся пополам, но просто так, сами по себе.

Захватят ли сколковские наноботы всю планету, если вырвутся из не очень хорошо охраняемых сколковских лабораторий и начнут размножаться в дикой природе?

Находим в тексте задачи важные моменты

Для начала опишем всё, что есть в задаче, и посмотрим, что из этого получится. Если всё нормально — переведём с русского на Python.

Вот что нам известно из текста задачи.

  1. Есть сколько-то бактерий, которые живут на нашей планете.
  2. Есть сколько-то наноботов, которые могут сбежать из лаборатории.
  3. Мы не знаем, сколько времени займёт их противостояние, но мы знаем вот что:
  4. до тех пор, пока есть на Земле нужные бактерии,
  5. каждый нанобот за одну секунду съедает одну бактерию…
  6. …и сразу удваивается.
  7. Каждая оставшаяся бактерия удваивается.
  8. И всё это происходит каждую секунду.
  9. Если наноботы съедят всех бактерий — мы должны об этом узнать.

Мы просто записали все данные, которые есть в задаче, в виде простых предложений. В каждом предложении — ровно одно действие.

Записываем текст в виде кода

Теперь давайте переведём эти 9 предложений в команды на языке Python. Правило простое: одно предложение = одна команда. Чтобы было ещё проще, мы добавим комментарии и пронумеруем их точно так же, как наши предложения.

# 1. Сколько на старте будет бактерий
bact = 10
# 2. Сколько у нас на старте наноботов
nano = 1
# 3. Пройденное время в секундах
sec = 0
# 4. Цикл будет работать до тех пор, пока есть хоть одна бактерия
while bact > 0:
    # На каждом шаге:
    # 5. Каждый нанобот съедает по одной бактерии, потому что сколько будет наноботов → столько и бактерий они съедят
    bact = bact - nano
    # 6. Наноботы удваиваются
    nano = nano * 2
    # 7. Бактерии удваиваются
    bact = bact * 2
    # 8. Время течёт
    sec = sec + 1
# 9. Если программа не зависнет в бесконечном цикле, не выкинет ошибку, а просто выведет число — наноботы победили вот за такое время
print(str(sec) + ' сек.')

Разбираемся, что происходит

Мы всего лишь разложили исходный текст задачи на простые кирпичики, которые потом превратили в рабочий код.

Теперь мы можем менять исходные параметры задачи — количество бактерий или наноботов — и смотреть, как это повлияет на время. Для этого мы используем две переменных в самом начале, где прописывали стартовые значения.

Как это выполнить

Исполнить этот код можно разными способами, вот самый дружелюбный с точки зрения интерфейса:

  1. Заходите на anaconda.com/distribution/ и скачиваете себе свежую «Анаконду» — это пакет для исполнения всякого на Python.
  2. Устанавливаете как обычную программу.
  3. Находите в приложениях Anaconda Navigator.
  4. В нём запускаете Jupyter Notebook.
  5. Создаёте новый ноутбук в какой-то папке, где вам надо.
  6. Копипастите код.
  7. Нажимаете Shift + Enter.
  8. Под вашим кодом выводится число секунд, за которое наноботы захватят мир.

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

Не каждую задачу можно вот так легко разложить на одношаговые команды. Часто приходится делать так: раскладывать задачу на несколько задач поменьше, потом с ними делать то же самое, а уже самые мелкие итоговые задачи выполнять с помощью понятных команд. Чтобы реализовать это в коде, чаще всего используют функциональное программирование или ООП.

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