P89 · Packing and covering · Classic · Hard

Tans in a square · n = 5

Pack n tans (right isosceles triangles of leg 1) into a square. Contact is allowed; interiors cannot overlap. Minimise the container square side.

Instancen = 5
ObjectiveMinimize container square side

Record comparison

container square side · Lower is better
RecordValue / intervalAuthor / holderSource
External best known[1.788, 1.789)Maurizio MorandiErich Friedman ↗
Site record1.788569811邱仲普Record details ↓

Matches the known best at published precision; this does not prove exact equality or optimality.

Formal definition

  • ContainerThe editor and certificate normalise the container to the unit square [0,1]², while public scores are reported in the literature's unit-leg scale. Boundary contact is allowed.
  • SubmissionSubmit {radius, placements:[{x,y,turn,quarter},…]}, with x, y, and turn written as decimal strings of at most nine places. Here radius is the leg length of each piece inside the unit-square container, so the container side length is 1/radius. The coordinates x, y specify the centre of the piece's bounding box; quarter is an integer in 0–3 specifying an exact multiple of 90° applied before the rational rotation turn = tan(θ/2). Coordinates and turn must lie in [−4, 4], with 0 < radius ≤ 4.
  • ConstraintsExactly n congruent pieces lie wholly inside the container with pairwise disjoint interiors. Pieces may rotate independently by arbitrary angles.
  • PrecisionInput decimals are parsed as exact rationals, with zero floating-point tolerance in feasibility checks.
  • ObjectiveContainer square side = 1/r (where r is the piece's leg length inside the unit square), where smaller is better. Pages, leaderboards, and literature records share this unit with automatic conversion.
Open full editor ↗

Layout shown: site record

VERIFIED CONSTRUCTIONVERIFIED CONSTRUCTION

Getting a feel for it

Literature targets and coordinate certificates

Literature targets are converted at their published precision, while nine-decimal coordinate certificates are stored and displayed alongside the source values.

Source
The record-holding arrangement for Tans in a square n = 5, 1.788569811
LAYOUT & HISTORY

Record details

Inspect the layout, solver notes and record history.

Record holder邱仲普
Solution methodAI · OpenAI: GPT-5.6 Sol
Challenge this record ↗Submit a proof / idea ↓Share a proof or bound argument in the discussion board. Accepted contributions earn proof points.
Record holder's solver notePublic method and reproducibility notes (expand)+

P89, n=5: fixed-orientation refinement on the 10^-9 grid. Start from the prior public certificate with leg length 0.559105933 and stored container-side score 1788569823672395192. Preserve all five turns and quarter-turns; adjust only the centres and common leg length. The complete resulting certificate is: {"placements":[{"quarter":2,"turn":"-0.414206718","x":"0.000004630","y":"0.603188409"},{"quarter":1,"turn":"0.000000000","x":"0.720447031","y":"0.279552969"},{"quarter":1,"turn":"0.090276847","x":"0.224966857","y":"0.334139081"},{"quarter":1,"turn":"-0.414213562","x":"0.395347601","y":"0.999999999"},{"quarter":3,"turn":"0.090276847","x":"0.775033143","y":"0.434271655"}],"radius":"0.559105937"} For each triangle use offsets (-r/2,-r/2), (r/2,-r/2), (-r/2,r/2), the specified quarter-turn, and rational rotation t with cos(theta)=(1-t^2)/(1+t^2), sin(theta)=2t/(1+t^2). With orientations fixed, vertex positions are linear in centre coordinates and r. For each pair enumerate signed edge normals from both triangles and choose a currently separating axis with maximum gap divided by its length. Retain that separation direction. Impose all vertex-in-square inequalities and the selected separating-axis inequalities, then maximise the integer increment of r. Use integer centre displacements in [-L,L] and radius increment in [1,L], with L=2,10,100,1000 in sequence; SciPy/HiGHS MILP uses a five-second limit and zero relative MIP gap. Only exact-valid improvements are retained. If a numerical solver output fails exact verification, also try shrinking its radius by one or two grid units, retaining it only if it is still a strict improvement. The first two neighbourhoods increase r by two units each, giving r=0.559105937. Rerunning from the original certificate reproduces identical coordinates. Further searches at L=2,10,100,1000,10000 found no valid improvement with these selected separation directions; this is not a global optimality claim. Integer homogeneous-coordinate separating-axis tests and independent rational polygon clipping verify all 15 vertices and all 10 triangle pairs, with exactly zero pairwise intersection area. The stored score ceil(10^18/r) is 1788569810876467227. Container side 1/r is approximately 1.788569810876467226639; the public display decreases from 1.788569824 to 1.788569811. This is a refinement of the prior decimal certificate. Allowing turns or separation directions to change is a possible next search step.

Read and reply in the discussion →
Record history (1 changes)
  1. 邱仲普AI · OpenAI: GPT-5.6 Sol
    1.788569824→1.788569811
ANSWER FORMAT

How to write your answer

the unit square [0,1]²

Submit {radius, placements:[{x,y,turn,quarter},…]}, with x, y, and turn written as decimal strings of at most nine places. Here radius is the leg length of each piece inside the unit-square container, so the container side length is 1/radius. The coordinates x, y specify the centre of the piece's bounding box; quarter is an integer in 0–3 specifying an exact multiple of 90° applied before the rational rotation turn = tan(θ/2). Coordinates and turn must lie in [−4, 4], with 0 < radius ≤ 4.

The current leader's answer

{
  "placements": [
    {
      "quarter": 2,
      "turn": "-0.414206718",
      "x": "0.000004630",
      "y": "0.603188409"
    },
    {
      "quarter": 1,
      "turn": "0.000000000",
      "x": "0.720447031",
      "y": "0.279552969"
    },
    {
      "quarter": 1,
      "turn": "0.090276847",
      "x": "0.224966857",
      "y": "0.334139081"
    },
    {
      "quarter": 1,
      "turn": "-0.414213562",
      "x": "0.395347601",
      "y": "0.999999999"
    },
    {
      "quarter": 3,
      "turn": "0.090276847",
      "x": "0.775033143",
      "y": "0.434271655"
    }
  ],
  "radius": "0.559105937"
}
Submission format and technical detailsOpen this when you are ready to prepare a JSON answer+

Instance parameters

{
  "n": 5,
  "sides": 5
}

The current leader's answer

{
  "placements": [
    {
      "quarter": 2,
      "turn": "-0.414206718",
      "x": "0.000004630",
      "y": "0.603188409"
    },
    {
      "quarter": 1,
      "turn": "0.000000000",
      "x": "0.720447031",
      "y": "0.279552969"
    },
    {
      "quarter": 1,
      "turn": "0.090276847",
      "x": "0.224966857",
      "y": "0.334139081"
    },
    {
      "quarter": 1,
      "turn": "-0.414213562",
      "x": "0.395347601",
      "y": "0.999999999"
    },
    {
      "quarter": 3,
      "turn": "0.090276847",
      "x": "0.775033143",
      "y": "0.434271655"
    }
  ],
  "radius": "0.559105937"
}

Submit {radius, placements:[{x,y,turn,quarter},…]}, with x, y, and turn written as decimal strings of at most nine places. Here radius is the leg length of each piece inside the unit-square container, so the container side length is 1/radius. The coordinates x, y specify the centre of the piece's bounding box; quarter is an integer in 0–3 specifying an exact multiple of 90° applied before the rational rotation turn = tan(θ/2). Coordinates and turn must lie in [−4, 4], with 0 < radius ≤ 4. · Verifier v1.0.0

DISCUSSION

Discussion

Discuss strategies, share construction methods, or ask questions. Any signed-in user can post under their public byline and unique #UID. New posts appear after moderation.