Исполнитель Цапля действует на плоскости с декартовой системой координат. В начальный момент Цапля находится в начале координат, её клюв направлен вдоль положительного направления оси ординат, клюв опущен. При опущенном клюве Цапля оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения. У исполнителя существует три команды:
Запись
Цапле был дан для исполнения следующий алгоритм:
Повтори 5 [Дуга 5, 0, 5, 180 Дуга 5, 5, 0, 180 Дуга 5, 0, -5, 180 Дуга 5, -5, 0, 180].
Определите, сколько точек с целочисленными координатами будут находиться внутри области, ограниченной линией, заданной данным алгоритмом. Точки на линии учитывать не следует.
Приведём решение на языке Python.
import turtle
t=turtle.Turtle()
t.reset()
t.seth(90)
t.width(2)
t.speed(20)
k = 10 #коэффициент для увеличения масштаба
for i in range(5):
t.seth(0)
t.circle(5*k,180)
t.seth(90)
t.circle(5*k,180)
t.seth(180)
t.circle(5*k,180)
t.seth(270)
t.circle(5*k,180)
t.penup()
for x in range(-15,6,1):
for y in range(-5,16):
t.goto(x*k , y*k )
t.dot(5)
t.penup()
turtle.mainloop()
Посчитаем количество точек.
Ответ: 237.
Приведём решение Сергея Стрелюхина на языке Python.
from turtle import *
k = 5; speed(0); color('black','red'); hideturtle(); begin_fill()
for i in range(5):
seth(0); circle(5*k, 180); seth(90); circle(5*k, 180); seth(180); circle(5*k, 180); seth(270); circle(5*k, 180)
end_fill(); sc = getcanvas()
otv = ['in' if (h:=sc.find_overlapping(x,y,x,y)) and sc.itemcget(h[-1], 'fill')=='red' else 0
for x in range(-100*k,100*k,k) for y in range(-100*k,100*k,k)]
print(otv.count('in'))
Приведём построение рисунка Бориса Савельева на языке КуМир.
использовать Черепаха
алг
нач
опустить хвост
нц 5 раз
нц 180 раз
вперед(0.08726646259971647)
вправо(1)
кц
вперед(0.08726646259971647)
влево(90)
кц
кон

