Определение возможных результатов работы простейших алгоритмов управления исполнителями и вычислительных алгоритмов · 51 задание
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
- Задание №6№6
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова напра…
Анализ алгоритмов и исполнители
Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост поднят. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды: Вперёд n (где n - целое число), вызывающая передвижение Черепахи на n единиц в том направлении, куда указывает её голова; Направо m (где m - целое число), вызывающая изменение направления движения на m градусов по часовой стрелке; Опустить хвост, означающая переход в режим рисования.
Запись Повтори k [Команда1 Команда2 ... КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Вперёд 100 Направо 90 Вперёд 100 Направо 45 Опустить хвост Повтори 15 [Вперёд 20 Направо 90 Вперёд 30 Направо 90].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Правильный ответ
588
Пояснение
Решение:
Хвост поднят, поэтому Вперёд 100 Направо 90 Вперёд 100 только переводит Черепаху в точку (100;100). После Направо 45 голова смотрит под углом −45∘ к оси Ox, и хвост опускается.
Цикл замыкается за два повтора: рисуется прямоугольник 20×30, повёрнутый на 45∘, с вершинами (100;100), (100+102;100−102), (100−52;100−252), (100−152;100−152).
Все стороны имеют угловые коэффициенты ±1, поэтому в переменных s=x+y и d=x−y условие «строго внутри» становится совсем простым:
200−302<s<200,0<d<202.
Так как 302≈42,43 и 202≈28,28, подходят целые s=158,159,…,199 (42 значения) и d=1,2,…,28 (28 значений).
Пара (s;d) отвечает целой точке x=2s+d, y=2s−d тогда и только тогда, когда s и d одной чётности. Среди значений s — 21 чётное и 21 нечётное, среди значений d — 14 чётных и 14 нечётных.
Итого 21⋅14+21⋅14=588. Проверим программой:
from math import sin, cos, radians
P = [(0.0, 0.0)]
x = y = 0.0
a = 90.0 # голова смотрит вдоль оси Oy
def F(n): # Вперёд n
global x, y
x = round(x + n * cos(radians(a)), 9) # round убирает шум float
y = round(y + n * sin(radians(a)), 9)
P.append((x, y))
def R(m): # Направо m
global a
a -= m
F(100); R(90); F(100); R(45) # хвост поднят - это не рисуется
P = [(x, y)] # опустили хвост
for i in range(2): # прямоугольник замыкается за 2 повторения
F(20); R(90); F(30); R(90)
def inside(px, py): # фигура выпуклая, обход по часовой стрелке
for i in range(len(P) - 1):
x1, y1 = P[i]; x2, y2 = P[i + 1]
if (x2 - x1) * (py - y1) - (y2 - y1) * (px - x1) >= -1e-9:
return False # точка на линии или снаружи
return True
xs = [p[0] for p in P]; ys = [p[1] for p in P]
print(sum(inside(px, py)
for px in range(int(min(xs)) - 1, int(max(xs)) + 2)
for py in range(int(min(ys)) - 1, int(max(ys)) + 2)))
Ответ: 588