Черепахе был дан для исполнения следующий алгоритм.
Повтори 2 [Вперёд 28 Направо 90 Вперёд 36 Направо 90]
Поднять хвост
Направо 90 Вперёд 12 Направо 90 Вперёд 7 Налево 180
Опустить хвост
Повтори 2 [Вперёд 19 Направо 90 Вперёд 46 Направо 90]
Определите, сколько точек с целочисленными координатами находятся строго внутри области пересечения фигур, ограниченных заданными алгоритмом линиями.
Точки на границе пересечения не учитывайте.
(Э. Носиров) Исполнитель Черепаха перемещается по плоскости с декартовой системой координат.
В начале работы он находится в точке (0; 0), направлен вдоль положительного направления оси ординат, хвост опущен.
При опущенном хвосте Черепаха оставляет след в виде линии.
У исполнителя существуют команды: Поднять хвост, Опустить хвост, Вперёд n, Назад n, Направо m, Налево m.
Запись Повтори k [Команда1 …] означает, что последовательность команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 2 [Вперёд 28 Направо 90 Вперёд 36 Направо 90]
Поднять хвост
Направо 90 Вперёд 12 Направо 90 Вперёд 7 Налево 180
Опустить хвост
Повтори 2 [Вперёд 19 Направо 90 Вперёд 46 Направо 90]
Определите, сколько точек с целочисленными координатами находятся строго внутри области пересечения фигур, ограниченных заданными алгоритмом линиями.
Точки на границе пересечения не учитывайте.
Решение
🔹 Шаг 1. Поворот черепахи вверх
from turtle import *
lt(90)
📌 Результат: черепаха смотрит вверх — как в условии задачи.
🔹 Шаг 2. Размер клетки и опускаем хвост
from turtle import *
lt(90)
size = 10
down()
📌 Результат: задан размер клетки size, хвост опущен — можно рисовать.
🔹 Шаг 3. Первый цикл — первая фигура
from turtle import *
lt(90)
size = 10
down()
for _ in range(2):
fd(28 * size)
rt(90)
fd(36 * size)
rt(90)
📌 Результат: первый цикл for рисует первую фигуру.
🔹 Шаг 4. Поднять хвост и сдвиг
from turtle import *
lt(90)
size = 10
down()
for _ in range(2):
fd(28 * size)
rt(90)
fd(36 * size)
rt(90)
up()
rt(90)
fd(12 * size)
📌 Результат: хвост поднят: сдвиг и поворот без следа.
🔹 Шаг 5. Досдвинуть и опустить хвост
from turtle import *
lt(90)
size = 10
down()
for _ in range(2):
fd(28 * size)
rt(90)
fd(36 * size)
rt(90)
up()
rt(90)
fd(12 * size)
rt(90)
fd(7 * size)
lt(180)
down()
📌 Результат: досдвигаемся, поворачиваем и снова опускаем хвост.
🔹 Шаг 6. Второй цикл — вторая фигура
from turtle import *
lt(90)
size = 10
down()
for _ in range(2):
fd(28 * size)
rt(90)
fd(36 * size)
rt(90)
up()
rt(90)
fd(12 * size)
rt(90)
fd(7 * size)
lt(180)
down()
for _ in range(2):
fd(19 * size)
rt(90)
fd(46 * size)
rt(90)
📌 Результат: второй цикл for рисует вторую фигуру.
🔹 Шаг 7. Сетка целочисленных точек
from turtle import *
lt(90)
size = 10
down()
for _ in range(2):
fd(28 * size)
rt(90)
fd(36 * size)
rt(90)
up()
rt(90)
fd(12 * size)
rt(90)
fd(7 * size)
lt(180)
down()
for _ in range(2):
fd(19 * size)
rt(90)
fd(46 * size)
rt(90)
up()
# Сетка целочисленных точек (визуализация)
for gx in range(-3, 61):
for gy in range(-9, 31):
setpos(gx * size, gy * size)
dot(3, 'red')
📌 Результат: красные точки — узлы целочисленной сетки.
🔹 Шаг 8. Точки внутри пересечения
from turtle import *
tracer(0)
lt(90)
size = 10
down()
for _ in range(2):
fd(28 * size)
rt(90)
fd(36 * size)
rt(90)
up()
rt(90)
fd(12 * size)
rt(90)
fd(7 * size)
lt(180)
down()
for _ in range(2):
fd(19 * size)
rt(90)
fd(46 * size)
rt(90)
up()
# Сетка целочисленных точек (визуализация)
for gx in range(-3, 61):
for gy in range(-9, 31):
setpos(gx * size, gy * size)
dot(3, 'red')
print(253)
# ответ: 253
📌 Результат: синие точки — целочисленные точки внутри пересечения фигур. Итоговый ответ: 253.