Задание №6 — Анализ алгоритмов для исполнителя
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз (k – целое число).
Черепахе был дан для исполнения следующий алгоритм:
Направо 45 Повтори 7 [Вперёд 7 Направо 45 Вперёд 20 Направо 135].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Правильный ответ
76
Пояснение
Решение:
За один проход тела цикла Черепаха поворачивает на , поэтому замкнутая фигура получается за два прохода: у неё четыре стороны — 7, 20, 7, 20 — и углы и . Это параллелограмм, а семь повторений просто обводят его несколько раз, ничего нового не рисуя.
Найдём вершины. Начальная команда «Направо 45» направляет голову под к оси ординат, поэтому первый отрезок ведёт из в точку . Затем голова смотрит вправо, отрезок длины 20 даёт вершину , после чего Черепаха спускается в и возвращается в начало координат.
Итак, нижняя сторона лежит на оси абсцисс от до , верхняя — на горизонтали , а боковые стороны идут под : левая по прямой , правая по прямой .
Точки на линиях не считаем, поэтому может принимать только значения 1, 2, 3, 4. При фиксированном целом координата должна лежать строго между и , то есть принимать значения от до — ровно 19 вариантов. Всего точек. Контроль: площадь параллелограмма равна , что согласуется с ответом.
from math import sqrt
h = 7 / sqrt(2) # высота параллелограмма ≈ 4.95
total = 0
for y in range(1, int(h) + 1):
total += len([x for x in range(-30, 60) if y < x < y + 20])
print(total) # 76
Ответ: 76