Решаем кодом задачу про наноботов
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. Под вашим кодом выводится число секунд, за которое наноботы захватят мир.

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

Обложка:

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

Корректор:

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

Вёрстка:

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

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Вам может быть интересно
easy
[anycomment]
Exit mobile version