Задание №6 — Анализ алгоритмов для исполнителя
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует две команды: Вперёд n (где n – целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова, и Направо m (где m – целое число), вызывающая изменение направления движения на m градусов по часовой стрелке.
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз (k – целое число).
Черепахе был дан для исполнения следующий алгоритм:
Направо 180
Повтори 3 [Направо 45 Вперёд 11 Направо 45]
Направо 315 Вперёд 11 Направо 90 Вперёд 22
Повтори 2 [Направо 90 Вперёд 11].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Правильный ответ
353
Пояснение
Решение:
Черепаха проводит семь отрезков: 11, 11, 11, 11, 22, 11 и 11. Повороты между соседними отрезками равны везде, кроме стыка циклов, где поворот ничего не меняет: третий и четвёртый отрезки продолжают друг друга и дают одну сторону длины 22.
Получается замкнутая шестиугольная «уголковая» фигура с вершинами , , , , , и сторонами 11, 11, 22, 22, 11, 11. По существу это повёрнутый на квадрат со стороной 22, из которого вырезан угловой квадрат со стороной 11; площадь равна .
Все стороны наклонены под , поэтому перейдём к «косым» координатам , . Большой квадрат превращается в , , а вырезанный угол — в четверть , . Строго внутри фигуры лежат точки с и , для которых не выполняются одновременно и .
Для узла решётки и — целые числа одной чётности, и пара однозначно задаёт точку. Если оба нечётные, то каждое пробегает 16 значений от до 15, это пар, из которых попадают в вырезанный угол — остаётся 192. Если оба чётные, то каждое пробегает 15 значений от до 14, это пар, из них в углу — остаётся 161. Итого .
c = 11 * 2 ** 0.5 # 15.5563 -- длина 11*sqrt(2)
n = 0
for x in range(-25, 26):
for y in range(-25, 26):
s, a = x + y, y - x
if -c < s < c and -c < a < c and not (s <= 0 and a <= 0):
n += 1
print(n)
Программа выводит 353.
Ответ: 353