Задание 6. Информатика. ЕГЭ. Поляков-7364
- Просмотры: 145
- Изменено: 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 [ Сместиться на (6, 15) Сместиться на (4, -6) Сместиться в (2, 2) Сместиться на (3, 9) ]
Определите количество точек с целочисленными координатами, лежащих на линии, нарисованной Чертёжником.
Решение:
Python
points = [(0, 0)]
for _ in range(10):
x, y = points[-1]
x += 6
y += 15
points.append((x, y))
x += 4
y -= 6
points.append((x, y))
points.append((2, 2))
points.append((2 + 3, 2 + 9))
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))
Ответ: \(15\)