Джеймс Девис - 40 задач на Python

40 задач на Python
Название: 40 задач на Python
Автор:
Жанры: Самоучители | Программирование | Задачники
Серии: Нет данных
ISBN: Нет данных
Год: 2024
О чем книга "40 задач на Python"

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

Бесплатно читать онлайн 40 задач на Python


Глава 1: Задачи на логику и сообразительность

1. Задача о пастухе и волках

Условие:

Пастух охраняет стадо овец на лугу. На лугу также находятся волки. Луг можно представить в виде сетки (N \times M) клеток. Каждая клетка может быть либо пустой, либо содержать овцу, либо волка, либо пастуха.

Пастух может двигаться на одну клетку вверх, вниз, влево или вправо (но не по диагонали). Волки также могут двигаться на одну клетку в любом из четырех направлений. В каждом ходу все волки и пастух делают один шаг одновременно. Если волк попадает на клетку с овцой, он съедает овцу. Если волк попадает на клетку с пастухом, волк останавливается, и пастух побеждает в этом раунде.

Ваша задача – написать программу, которая моделирует передвижения пастуха и волков на лугу, чтобы пастух мог спасти как можно больше овец.

Входные данные:

– Размер луга (N \times M)

– Позиции овец, волков и пастуха на лугу

– Количество ходов, которые нужно смоделировать

Выходные данные:

– Позиции всех овец, волков и пастуха после заданного количества ходов

– Количество спасённых овец

Пример входных данных:

5 5

Пастух: 2 2

Овцы: 1 1, 3 3, 4 4

Волки: 0 0, 4 0

Ходы: 5

Пример выхода:

Пастух: 3 3

Овцы: 1 1, 3 3

Волки: 0 1, 4 1

Спасённые овцы: 2

Пояснение:

1. На вход подаются размеры луга (5x5), стартовые позиции пастуха (2,2), овец (1,1), (3,3), (4,4), волков (0,0), (4,0) и количество ходов (5).

2. Программа моделирует передвижение пастуха и волков в течение 5 ходов и выводит финальные позиции и количество спасённых овец.

Примечания:

– Считайте, что пастух и волки могут двигаться на одну клетку в одном направлении за один ход.

– Волки преследуют овец или пастуха, выбирая направление, которое минимизирует расстояние до ближайшей овцы или пастуха.

– Овцы остаются на месте.

– Если несколько волков попадают на одну клетку одновременно, один волк съедает овцу, остальные остаются на этой клетке.


Идея решения задачи о пастухе и волках

1. Представление поля

Представим луг в виде двумерного массива (списка списков). Каждая клетка может содержать одну из следующих сущностей:

– Пустая клетка (`.`)

– Пастух (`P`)

– Овца (`S`)

– Волк (`W`)

2. Чтение и обработка входных данных

Читаем размеры луга, позиции пастуха, овец и волков, а также количество ходов. Инициализируем двумерный массив для представления луга и заполняем его исходными данными.

3. Логика движения

– Пастух движется в направлении ближайшей овцы, чтобы защитить её.

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

– Волки движутся в направлении ближайшей овцы или пастуха.

– Для каждого волка определяем кратчайший путь до ближайшей цели и движемся в этом направлении.

– На каждом шагу все волки и пастух совершают по одному движению одновременно. Важно учесть, что сначала нужно рассчитать новые позиции всех сущностей, а затем обновить поле.

4. Обработка столкновений

– Если волк попадает на клетку с овцой, овца съедается.

– Если волк попадает на клетку с пастухом, волк останавливается и считается побеждённым, и пастух побеждает в этом раунде.

5. Моделирование ходов

– Повторяем процесс движения и обновления поля для заданного количества ходов.

– Отслеживаем количество спасённых овец.

6. Вывод результатов

– По завершении всех ходов выводим конечные позиции пастуха, овец и волков.

– Выводим количество спасённых овец.


Пример реализации на Python

```python

from collections import deque

# Чтение входных данных

N, M = map(int, input().split())

pastukh = tuple(map(int, input().split()))

sheep_positions = [tuple(map(int, pos.split())) for pos in input().split(',')]

wolf_positions = [tuple(map(int, pos.split())) for pos in input().split(',')]

K = int(input())

# Инициализация поля

field = [['.' for _ in range(M)] for _ in range(N)]

field[pastukh[0]][pastukh[1]] = 'P'

for x, y in sheep_positions:

field[x][y] = 'S'

for x, y in wolf_positions:

field[x][y] = 'W'

# Вспомогательные функции

def is_valid(x, y):

return 0 <= x < N and 0 <= y < M

def bfs(start, goals):

queue = deque([start])

visited = set()

visited.add(start)

dist = {start: 0}

while queue:

x, y = queue.popleft()

if (x, y) in goals:

return dist[(x, y)], (x, y)

for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:

nx, ny = x + dx, y + dy

if is_valid(nx, ny) and (nx, ny) not in visited:

queue.append((nx, ny))

visited.add((nx, ny))

dist[(nx, ny)] = dist[(x, y)] + 1

return float('inf'), None

# Основная логика движения и моделирования

for _ in range(K):

# Движение пастуха

_, nearest_sheep = bfs(pastukh, sheep_positions)

if nearest_sheep:

px, py = pastukh

sx, sy = nearest_sheep

if px < sx: px += 1

elif px > sx: px -= 1

elif py < sy: py += 1

elif py > sy: py -= 1

pastukh = (px, py)

# Движение волков

new_wolf_positions = []

for wx, wy in wolf_positions:

_, target = bfs((wx, wy), sheep_positions + [pastukh])

if target:

tx, ty = target

if wx < tx: wx += 1

elif wx > tx: wx -= 1

elif wy < ty: wy += 1

elif wy > ty: wy -= 1

new_wolf_positions.append((wx, wy))

wolf_positions = new_wolf_positions

# Обновление поля и проверка столкновений

field = [['.' for _ in range(M)] for _ in range(N)]

field[pastukh[0]][pastukh[1]] = 'P'

new_sheep_positions = []

for x, y in sheep_positions:

if (x, y) not in wolf_positions:

field[x][y] = 'S'

new_sheep_positions.append((x, y))

sheep_positions = new_sheep_positions

for x, y in wolf_positions:

if field[x][y] == 'P':

field[x][y] = 'P'

else:

field[x][y] = 'W'

# Вывод результатов

print(f"Пастух: {pastukh[0]} {pastukh[1]}")

print("Овцы:", ', '.join(f"{x} {y}" for x, y in sheep_positions))

print("Волки:", ', '.join(f"{x} {y}" for x, y in wolf_positions))

print(f"Спасённые овцы: {len(sheep_positions)}")

```

Давайте разберем код более подробно на каждом этапе.

Чтение входных данных

```python

N, M = map(int, input().split())

pastukh = tuple(map(int, input().split()))

sheep_positions = [tuple(map(int, pos.split())) for pos in input().split(',')]

wolf_positions = [tuple(map(int, pos.split())) for pos in input().split(',')]

K = int(input())

```

1. `N, M = map(int, input().split())`: Считываем размеры луга (количество строк и столбцов).

2. `pastukh = tuple(map(int, input().split()))`: Считываем координаты пастуха и сохраняем их как кортеж.

3. `sheep_positions = [tuple(map(int, pos.split())) for pos in input().split(',')]`: Считываем позиции всех овец. Каждая позиция считывается как кортеж координат, и все позиции сохраняются в список.

4. `wolf_positions = [tuple(map(int, pos.split())) for pos in input().split(',')]`: Считываем позиции всех волков аналогично овцам.

5. `K = int(input())`: Считываем количество ходов.

Инициализация поля

```python

field = [['.' for _ in range(M)] for _ in range(N)]


С этой книгой читают
Данная книга – это практическое руководство для освоения языка программирования Python через решение разнообразных задач и проектов. В книге представлены подробные решения и код для каждой задачи.Основные разделы включают:– Логическое мышление и базовые конструкции: задачи для развития алгоритмического мышления и понимания основных конструкций Python.– Рисование и графика: упражнения с графическими изображениями и анимациями, используя библиотеки
В этой книге вы встретите Аркандора, могущественного архимага, который проведет вас через глубины языка программирования Python от основ до продвинутых концепций. Откройте для себя волшебство создания переменных и управления данными, погрузитесь в мир объектно-ориентированного программирования, исследуйте астрономические данные и создайте свои собственные веб-приложения. С каждой главой вы будете углубляться в знания и навыки, воплощая свои идеи
Данное руководство по усиленному обучению (Reinforcement Learning, RL), охватывает теоретические основы, практические применения и современные достижения. В начале дается определение RL, его исторический контекст и ключевые отличия от других видов машинного обучения. Примеры применения RL охватывают игры, робототехнику, финансовые рынки и управление ресурсами. Математические основы включают марковские процессы принятия решений, состояния, действи
Книга представляет исследование процесса разработки приложений в области дополненной и виртуальной реальности. Автор объясняет различные аспекты этого процесса, начиная от основных понятий AR и VR, заканчивая стратегиями развертывания и монетизации приложений. И подчеркивает важность понимания особенностей программирования для AR и VR, оптимизации производительности, тестирования, управления ресурсами. Каждый раздел дополнен наглядными примерами.
Стесняетесь петь, но очень хотите? Воспользуйтесь уникальной авторской методикой Екатерины Карпенко!Вы научитесь «мыслить звуками» и представлять мелодию, разовьете слуховую память и натренируете связки. Певица и преподаватель Екатерина Карпенко почти десять лет создавала этот курс: проводила исследования, пробовала на себе и учениках разные техники и приемы.Талант не нужен! Красиво петь – то же самое, что писать от руки или вести машину. Это нав
Всем, кто любит мастерить и делать красивые подарки, – читать обязательно. Автор проработал много лет школе, колледже, Ювелирной академии и готов поделиться своими секретами. Кроме бижутерии сделанной своими руками, прикольных роботов, монстров из соленого теста, в книге есть тесты и загадки на ювелирную тему, самодельные инструменты, технологии чистки и обработки бижутерии в домашних условиях. Гарантирую – будет интересно.
Тебя предали и изменили? Не знаешь, что делать дальше?Мучает одиночество и страх старости? Бессмысленность и неопределенность в жизни? Не знаешь, как относится к тебе мужчина и что ждать от отношений?На твои вопросы есть ответы. Находясь вовлеченной эмоционально, ты можешь не видеть выхода. А выход всегда есть. Любую ситуацию можно сделать понятной, а жизнь легкой и гармоничной.Это руководство для женщин. Ответы на вопросы. «Наши поступки определ
Эта книга посвящена удивительному ремеслу, ставшему самостоятельным разделом современного прикладного искусства – флористике. Автор – художник-флорист с более чем 20-летним стажем – делится с читателями профессиональными секретами составления букетов из сухих цветов. Все репродукции, используемые в данном издании, созданы автором в разное время и демонстрируют настоящее мастерство и свой художественный стиль. Книга предназначена как для начинающи
Если не знаешь своего прошлого – у тебя нет будущего. Оливия не может жить и в настоящем, её одолевают видения, голоса, пугают тени былого… Чтобы вновь обрести себя, ей придётся шагнуть во тьму… Придётся разрубить путы проклятия, связывающие души, и открыть страшную правду, таящуюся во снах…
Мой сборник поэзии будет интересен всем (особенно читателям женского пола), кто любил, любит, страдал от любви и смог пережить всё и пойти дальше. Мои стихи – от тонкой нежной лирики до ироничных и даже «стёбных» не оставят равнодушными никого, кто любит современную поэзию хорошего качества. Выпустить эту книгу меня заставили мои читатели в группах в ВК и в Инстаграм. Очень надеюсь, что, благодаря прогрессу, который не стоит на месте, читателей с
Здесь вы встретите Серкулеса и Плюмблдора, крота инженера, Пенаккино и Фрешди Фюргера хранящий свои секреты в ящиках, летучую мышь путешественника по вселенным, паука ищущий в космосе дом, носки людоеды, Пони пожиратели нечисти, китов волшебников, гномов великанов, табуреток физиков и многое прочее. Киборги и телепорты, атомы вампиры, тень подражатель, червяк скоростной поезд…. Эта книга – отдых, придумка, да выдумки; являющимися воистину уникаль
Охотники одержали победу и заставили магов прятаться под надёжными сводами Обливиона. Но маги ещё не утратили надежду, ведь их главная защитница – Маргарита Белая, по прозвищу Пташка, уверенно стоит на ногах. Она не позволит своему отцу уничтожить магию, чего бы ей это не стоило.Но кто спасёт саму Пташку? Кто защитить её от самой себя? И сколько ещё секретов скрывает эта ведьма?К сожалению, Лазарь будет слишком занят и узнает обо всём тогда, когд