# your code goes here
#0JLQsNGB0LjQu9C10L3QutC+INCQ0YDRgtC10Lwg
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Polygon
def _get_midpoints(vertices):
mid1 = (vertices[0] + vertices[1]) / 2
mid2 = (vertices[1] + vertices[2]) / 2
mid3 = (vertices[0] + vertices[2]) / 2
return mid1, mid2, mid3
def _draw_sierpinski_recursive(ax, vertices, depth, color):
if depth == 0:
triangle = Polygon(vertices, facecolor=color, edgecolor='none')
ax.add_patch(triangle)
else:
v1, v2, v3 = vertices
mid1, mid2, mid3 = _get_midpoints(vertices)
_draw_sierpinski_recursive(ax, np.array([v1, mid1, mid3]), depth - 1, color)
_draw_sierpinski_recursive(ax, np.array([mid1, v2, mid2]), depth - 1, color)
_draw_sierpinski_recursive(ax, np.array([mid3, mid2, v3]), depth - 1, color)
def plot_sierpinski(depth, color='black', figsize=(10, 8.66), title_on=True):
fig, ax = plt.subplots(figsize=figsize)
height = np.sqrt(3) / 2
initial_vertices = np.array([
[0, 0],
[1, 0],
[0.5, height]
])
_draw_sierpinski_recursive(ax, initial_vertices, depth, color)
ax.set_aspect('equal')
ax.axis('off')
if title_on:
plt.title(f"ТрикутникСерпінського(Глибина){depth}) ", fontsize=16)
plt.show()
#plot_sierpinski(depth=6, color='#004C99')
plot_sierpinski(depth=3, color='#004C99', title_on=False)
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCiMwSkxRc05HQjBMalF1OUMxMEwzUXV0QytJTkNRMFlEUmd0QzEwTHdnCmltcG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQKaW1wb3J0IG51bXB5IGFzIG5wCmZyb20gbWF0cGxvdGxpYi5wYXRjaGVzIGltcG9ydCBQb2x5Z29uCgpkZWYgX2dldF9taWRwb2ludHModmVydGljZXMpOgogICAgbWlkMSA9ICh2ZXJ0aWNlc1swXSArIHZlcnRpY2VzWzFdKSAvIDIKICAgIG1pZDIgPSAodmVydGljZXNbMV0gKyB2ZXJ0aWNlc1syXSkgLyAyCiAgICBtaWQzID0gKHZlcnRpY2VzWzBdICsgdmVydGljZXNbMl0pIC8gMgogICAgcmV0dXJuIG1pZDEsIG1pZDIsIG1pZDMKCmRlZiBfZHJhd19zaWVycGluc2tpX3JlY3Vyc2l2ZShheCwgdmVydGljZXMsIGRlcHRoLCBjb2xvcik6CiAgICBpZiBkZXB0aCA9PSAwOgogICAgICAgIHRyaWFuZ2xlID0gUG9seWdvbih2ZXJ0aWNlcywgZmFjZWNvbG9yPWNvbG9yLCBlZGdlY29sb3I9J25vbmUnKQogICAgICAgIGF4LmFkZF9wYXRjaCh0cmlhbmdsZSkKICAgIGVsc2U6CiAgICAgICAgdjEsIHYyLCB2MyA9IHZlcnRpY2VzCiAgICAgICAgbWlkMSwgbWlkMiwgbWlkMyA9IF9nZXRfbWlkcG9pbnRzKHZlcnRpY2VzKQogICAgICAgIF9kcmF3X3NpZXJwaW5za2lfcmVjdXJzaXZlKGF4LCBucC5hcnJheShbdjEsIG1pZDEsIG1pZDNdKSwgZGVwdGggLSAxLCBjb2xvcikKICAgICAgICBfZHJhd19zaWVycGluc2tpX3JlY3Vyc2l2ZShheCwgbnAuYXJyYXkoW21pZDEsIHYyLCBtaWQyXSksIGRlcHRoIC0gMSwgY29sb3IpCiAgICAgICAgX2RyYXdfc2llcnBpbnNraV9yZWN1cnNpdmUoYXgsIG5wLmFycmF5KFttaWQzLCBtaWQyLCB2M10pLCBkZXB0aCAtIDEsIGNvbG9yKQoKZGVmIHBsb3Rfc2llcnBpbnNraShkZXB0aCwgIGNvbG9yPSdibGFjaycsICBmaWdzaXplPSgxMCwgOC42NiksIHRpdGxlX29uPVRydWUpOgogICAgZmlnLCBheCA9IHBsdC5zdWJwbG90cyhmaWdzaXplPWZpZ3NpemUpCiAgICBoZWlnaHQgPSBucC5zcXJ0KDMpIC8gMgogICAgaW5pdGlhbF92ZXJ0aWNlcyA9IG5wLmFycmF5KFsKICAgICAgICBbMCwgMF0sICAgIAogICAgICAgIFsxLCAwXSwgICAKICAgICAgICBbMC41LCBoZWlnaHRdIAogICAgICAgIF0pCiAgICBfZHJhd19zaWVycGluc2tpX3JlY3Vyc2l2ZShheCwgaW5pdGlhbF92ZXJ0aWNlcywgZGVwdGgsIGNvbG9yKQogICAgYXguc2V0X2FzcGVjdCgnZXF1YWwnKSAKICAgIGF4LmF4aXMoJ29mZicpICAgICAgICAgCiAgICBpZiB0aXRsZV9vbjoKICAgICAgICBwbHQudGl0bGUoZiLQotGA0LjQutGD0YLQvdC40LrQodC10YDQv9GW0L3RgdGM0LrQvtCz0L4o0JPQu9C40LHQuNC90LApe2RlcHRofSkgIiwgZm9udHNpemU9MTYpCiAgICBwbHQuc2hvdygpCgojcGxvdF9zaWVycGluc2tpKGRlcHRoPTYsIGNvbG9yPScjMDA0Qzk5JykKcGxvdF9zaWVycGluc2tpKGRlcHRoPTMsIGNvbG9yPScjMDA0Qzk5JywgdGl0bGVfb249RmFsc2UpIAoK