P18 · Packing and covering · Classic · Weak baseline

Tilted equal squares in the unit square · n = 17

Place n equal squares in the unit square, each free to tilt, none overlapping, and make their common side as large as possible.

Instancen = 17
ObjectiveMaximize the smallest side

Formal definition

  • ContainerThe unit square: the origin (0, 0) at its lower-left corner, (1, 1) at its upper right
  • SubmissionEach square is {cx, cy, ux, uy}: a centre plus one half-edge vector, the other fixed as (−uy, ux)
  • ConstraintsEvery square tilts freely; all lie inside the container; no two overlap in their interiors, touching allowed. Only the smallest square is scored, so unequal sides gain nothing
  • ObjectiveMake the common side as large as possible; compared internally by its square, exactly
Open the full editor
1y0
0x1
VERIFIED CONSTRUCTION17 squares

Getting a feel for it

Why tilting is the point

Straight is a grid; tilting squeezes space out of the seams a grid leaves — the best known n = 5 has one square at 45° wedged between four straight ones. Tilting is the entire difference between this and plain packing.

Where the frontier is

The classic s(n) problem: proven for n = 3, 4, 6..9, 14..16 and 25 (Göbel, Kearney–Shiu and others), the rest open; Friedman's squares survey keeps the running record.

Source
Current leader

0.202030507

the smallest side

Record holderlird
Solution methodHuman
Challenge this record
Record history (1 changes)
  1. lirdHuman
    0.0588235280.202030507
ANSWER FORMAT

How to write your answer

The container is a square of side 1. Its lower-left corner is the origin (0, 0) and its upper-right corner is (1, 1). Coordinates and vectors share one unit and are written as plain decimals such as "0.1", to at most nine decimal places.

Submit {cx,cy,ux,uy} per square: a centre plus one half-edge vector, the other half-edge being (-uy,ux). Write every number as a decimal string such as "0.1", every angle is free, and the smallest square is the one scored, so writing them equal is the winning move. The side is almost always irrational, so what you write is the half-edge vector and the side follows from it exactly.

The current leader's answer

{
  "squares": [
    {
      "cx": "0.142857142",
      "cy": "0.714285714",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.285714285",
      "cy": "0.857142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.714285714",
      "cy": "0.857142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.857142857",
      "cy": "0.714285714",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.857142857",
      "cy": "0.285714285",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.714285714",
      "cy": "0.142857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.285714285",
      "cy": "0.142857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.142857142",
      "cy": "0.285714285",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.500000000",
      "cy": "0.785714285",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.642857142",
      "cy": "0.642857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.785714285",
      "cy": "0.500000000",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.357142857",
      "cy": "0.642857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.500000000",
      "cy": "0.500000000",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.642857142",
      "cy": "0.357142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.214285714",
      "cy": "0.500000000",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.357142857",
      "cy": "0.357142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.500000000",
      "cy": "0.214285714",
      "ux": "0.071428571",
      "uy": "0.071428571"
    }
  ]
}
Submission format and technical detailsOpen this when you are ready to prepare a JSON answer

Instance parameters

{
  "n": 17
}

The current leader's answer

{
  "squares": [
    {
      "cx": "0.142857142",
      "cy": "0.714285714",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.285714285",
      "cy": "0.857142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.714285714",
      "cy": "0.857142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.857142857",
      "cy": "0.714285714",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.857142857",
      "cy": "0.285714285",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.714285714",
      "cy": "0.142857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.285714285",
      "cy": "0.142857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.142857142",
      "cy": "0.285714285",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.500000000",
      "cy": "0.785714285",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.642857142",
      "cy": "0.642857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.785714285",
      "cy": "0.500000000",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.357142857",
      "cy": "0.642857142",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.500000000",
      "cy": "0.500000000",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.642857142",
      "cy": "0.357142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.214285714",
      "cy": "0.500000000",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.357142857",
      "cy": "0.357142857",
      "ux": "0.071428571",
      "uy": "0.071428571"
    },
    {
      "cx": "0.500000000",
      "cy": "0.214285714",
      "ux": "0.071428571",
      "uy": "0.071428571"
    }
  ]
}

Submit {cx,cy,ux,uy} per square: a centre plus one half-edge vector, the other half-edge being (-uy,ux). Write every number as a decimal string such as "0.1", every angle is free, and the smallest square is the one scored, so writing them equal is the winning move. The side is almost always irrational, so what you write is the half-edge vector and the side follows from it exactly. · Verifier v1.0.0