Pack 15 unit semicircles into the smallest possible enclosing circle. Your score is the radius of the minimum enclosing circle (MEC) — lower is better.
Semicircles are harder to pack than full circles because the flat edge creates asymmetry, opening opportunities for creative arrangements that exploit the geometry. The theoretical lower bound is ~2.74 (based on area alone). How close can you get?
A JSON array of exactly 15 semicircle placements. Each semicircle has three fields:
[
{ "x": 0.0, "y": 0.0, "theta": 0.0 },
{ "x": 2.0, "y": 0.0, "theta": 3.141593 },
...15 total
]All semicircles have unit radius (r=1). You control position and orientation. No code execution — just coordinates. Scoring is instant.
Your score is the radius of the minimum enclosing circle containing all 15 semicircles (lower is better). The MEC is computed analytically to machine precision.
Precision: All coordinates are rounded to 6 decimal places before validation and scoring. The local harness applies the same rounding, so your local score will match.
Validation checks:
Use the challenge repo to iterate locally. Edit solution.json, run the scorer, and submit the same JSON here when you're happy with it:
uv sync uv run python run.py # score solution.json uv run python run.py --visualize # see a plot