Draws int(360 / size_of_gap) circles, each in a random RGB color, turning the heading
by the gap after each. A gap that is not positive raises ValueError, and the integer
count avoids the TypeError that range raises for a float.
Task: MIL-004#2
Task: MIL-004#3
200 steps of equal length, each in a random heading of 0, 90, 180 or 270 degrees and
a random RGB color, with a thick line and the fastest speed.
Task: MIL-004#1
draw_shape turns 360 divided by the number of sides after each side and rejects
fewer than 3 sides. draw_shapes draws a triangle up to a decagon, each in a color
from the palette.
Task: MIL-003#3
Task: MIL-003#4
Task: MIL-003#5
random_color returns an immutable (red, green, blue) tuple of integers from 0 to 255
and random_palette_color picks a named color. Both take an optional random.Random
so that tests can seed them.
Task: MIL-003#1
Task: MIL-003#2
Challenge 1 draws four sides and turns right 90 degrees after each. Challenge 2 puts
the pen down for a dash and up for a gap and leaves it down at the end. Lengths and
counts come from constants.py; invalid values raise ValueError.
Task: MIL-002#3
Task: MIL-002#4
Task: MIL-002#5
pyproject.toml declares Python 3.13 or later, an empty runtime dependency list and
pytest, ruff and mypy as development tools. The package has constants.py, the one
place for constants, and a smoke test keeps the test run green.
Task: MIL-001#1
Task: MIL-001#2
Task: MIL-001#3