Задание 6. Информатика. ЕГЭ. Поляков-7365
- Просмотры: 82
- Изменено: 18 января 2025
*(Е. Джобс) Исполнитель Чертёжник перемещается на координатной плоскости, оставляя след в виде линии. Чертёжник может выполнять команду Сместиться на \((a, \,b)\) (где \(a, \, b\) — целые числа), перемещающую Чертёжника из точки с координатами \((x, \, y)\) в точку с координатами \((x+a, \, y+b).\) Если числа \(a, \, b\) положительные, то значение соответствующей координаты увеличивается, если отрицательные — уменьшается. Например, если Чертёжник находится в точке с координатами \((4, \, 2),\) то команда Сместиться на \((2, \,-3)\) переместит Чертёжника в точку \((6, \,-1).\) Запись
Повтори k [Команда1 Команда2 … КомандаS]
означает, что последовательность из \(S\) команд повторится \(k\) раз.
Чертёжнику был дан для исполнения следующий алгоритм:
Повтори 10 [ Сместиться на (60, 156) Сместиться на (140, -153) Сместиться в (71, 80) Сместиться на (-111, 77) ]
Определите количество точек с целочисленными координатами, лежащих на линии, нарисованной Чертёжником.
Решение:
Python
points = [(0, 0)]
for _ in range(10):
x, y = points[-1]
x += 60
y += 156
points.append((x, y))
x += 140
y -= 153
points.append((x, y))
points.append((71, 80))
points.append((71-111, 80+77))
ans = set()
for p in zip(points, points[1:]):
x0, y0 = p[0]
x1, y1 = p[1]
for x in range(min(x0, x1), max(x0, x1) + 1):
for y in range(min(y0, y1), max(y0, y1) + 1):
if (x - x0) * (y1 - y0) == (y - y0) * (x1 - x0):
ans.add((x, y))
print(len(ans))
Ответ: \(29\)