Задание 6. Информатика. ЕГЭ. Поляков-7363

Просмотры: 83
Изменено: 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)
          Сместиться на (-5, -5)
          Сместиться в (2, 2)
          Сместиться на (-1, -10) ]

Определите количество точек с целочисленными координатами, лежащих на линии, нарисованной Чертёжником.

Решение:

Python


points = [(0, 0)]
for _ in range(10):
    x, y = points[-1]
    x += 6
    y += 15
    points.append((x, y))
    x -= 5
    y -= 5
    points.append((x, y))
    points.append((2, 2))
    points.append((2 - 1, 2 - 10))
    
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))

Ответ: \(18\)