Задание 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\)