P81 · Packing and covering · Classic · Applied frontier · Hard

Irregular strip nesting · GARDEYN1 · 50 pieces, 10 types

Given the strip height H, a set of piece polygons and how many copies of each are demanded, place every piece in the strip so that the largest x-coordinate over all vertices — the occupied length L — is as small as possible. Pieces may only be translated and turned about their own origin by 0°, 90°, 180° or 270°; they may touch but their interiors may not overlap, and none may leave the strip.

InstanceGARDEYN1 · 50 pieces, 10 types
ObjectiveMinimize occupied length

Formal definition

  • ContainerThe closed region {x ≥ 0, 0 ≤ y ≤ H}; a piece may touch the boundary. H is fixed per case: 20000 for GARDEYN1, 10000 for GARDEYN2, 44 for GARDEYN9
  • SubmissionOne placement per copy of a piece: its type, its turn and its shift. The piece polygons (concave and asymmetric allowed), the demands and the strip height are frozen by the case; a submission changes no vertex, count or shape
  • MovesEach copy is turned about its own origin by 0°, 90°, 180° or 270°, then shifted by (x, y). No reflection, scaling or free angle
  • No overlapNo two copies have intersecting interiors: touching along an edge or at a vertex is allowed; containment or any positive-area overlap is not
  • Exact verificationCoordinates are decimal strings of at most 24 places, scaled by 10²⁴ to integers, and the four right-angle turns keep them integers. Every polygon is triangulated exactly and every triangle pair is tested by separating axes with BigInt cross products; equal projection endpoints are contact, not overlap. No floating point and no ε
  • ScoreThe largest x-coordinate over all placed vertices, L, exact to 24 places; smaller is better. The source file's container length is not the score, and a claimed score is ignored
  • ObjectiveMinimise L over all legal placements
Open the full editor
VERIFIED CONSTRUCTIONoccupied length 16176.892

Getting a feel for it

Why these three cases

The GARDEYN family comes from real garment-cutting and direct-to-film print jobs: concave, asymmetric outlines with few repeats. GARDEYN1 is 10 types, 5 copies each; GARDEYN2 is 50 pieces, all different; GARDEYN9 is 47 different print motifs in a strip only 44 high. Each case is complete on its own, and an answer for one says nothing about another.

Quarter turns only

Nesting solvers in the literature usually allow continuous rotation, but continuous angles carry trigonometry into the coordinates and cannot be verified exactly. Here only 0°, 90°, 180° and 270° are allowed, every coordinate stays rational, and the verifier decides contact and overlap with no tolerance at all. It also means this problem is not directly comparable with published results that allow free rotation.

Where the frontier is

There is no external record. The Sparrow repository publishes its own layouts (lengths 16181.169, 47382.125 and 65.792223), each of which verifies exactly under this problem's rules; starting from them, a short exact compaction here brought the three cases to 16177.649, 47319.670679 and 65.769735999999999, shipped as baselines bylined MinMax Arena. None of these is a proof of optimality or a literature record; the editor can load Sparrow's layouts and the weaker 20-second starting layouts for comparison.

Source

Where the data comes from

The instance geometry and the reference layouts come from the Sparrow repository (Jeroen Gardeyn, Greet Vanden Berghe and Tony Wauters, KU Leuven; MIT) at revision 649d4c78, with the original decimal coordinates kept free of floating-point truncation; each case's input hashes and source links can be downloaded from the editor.

Source
The record-holding arrangement for Irregular strip nesting GARDEYN1 · 50 pieces, 10 types, 16176.8923
Current leader

16176.8923

occupied length

Record holderNUE_13
Solution methodHuman
Challenge this record Submit a proof / idea Share a proof or idea in the discussion. Accepted contributions can earn proof points.
Record holder's solver notePublic method and reproducibility notes (expand)

微调,目前长度由零件29控制,成功缩小0.4

Read and reply in the discussion
Record history (2 changes)
  1. NUE_13Human
    16177.20916176.8923
  2. NUE_13Human
    16177.64916177.209
ANSWER FORMAT

How to write your answer

The strip {x ≥ 0, 0 ≤ y ≤ H}: H is the material's width, drawn vertically, and the material runs on to the right without end. Each piece is a polygon given by its own decimal vertices, and may be concave.

Submit {schemaVersion: "1", problemKey: "V09", instanceId, placements}, where instanceId is the id in the case's instance file (v09-gardeyn2-v1, say). placements has one entry {typeId, rotation, x, y} per copy of a piece: typeId names the piece type, rotation is 0, 90, 180 or 270, and x, y are decimal strings (at most 24 fractional digits, absolute value at most 1000000) — the piece is turned about its own origin, then shifted. Each type must occur exactly as many times as demanded; the order of the array does not matter. The piece shapes, the strip height and the demands can be downloaded from the editor; they are not part of the answer.

The current leader's answer

{
  "instanceId": "v09-gardeyn1-v1",
  "placements": [
    {
      "rotation": 0,
      "typeId": "t0",
      "x": "8402.8923",
      "y": "3143.713"
    },
    {
      "rotation": 90,
      "typeId": "t0",
      "x": "7512.8923",
      "y": "323.3301"
    },
    {
      "rotation": 90,
      "typeId": "t0",
      "x": "11830.55",
      "y": "5684.8635"
    },
    {
      "rotation": 90,
      "typeId": "t0",
      "x": "13613.341",
      "y": "13113.829"
    },
    {
      "rotation": 180,
      "typeId": "t0",
      "x": "9324.816",
      "y": "14931.517"
    },
    {
      "rotation": 0,
      "typeId": "t1",
      "x": "3122.1805",
      "y": "7473.209"
    },
    {
      "rotation": 0,
      "typeId": "t1",
      "x": "11572.971",
      "y": "5622.589"
    },
    {
      "rotation": 90,
      "typeId": "t1",
      "x": "6817.1535",
      "y": "7192.511"
    },
    {
      "rotation": 270,
      "typeId": "t1",
      "x": "2563.269",
      "y": "7331.8044"
    },
    {
      "rotation": 270,
      "typeId": "t1",
      "x": "5051.2073",
      "y": "17520.593"
    },
    {
      "rotation": 90,
      "typeId": "t2",
      "x": "9025.2895",
      "y": "9139.4"
    },
    {
      "rotation": 90,
      "typeId": "t2",
      "x": "9984.072",
      "y": "17403.58"
    },
    {
      "rotation": 180,
      "typeId": "t2",
      "x": "9827.209",
      "y": "17892.098"
    },
    {
      "rotation": 270,
      "typeId": "t2",
      "x": "4339.8555",
      "y": "11234.661"
    },
    {
      "rotation": 270,
      "typeId": "t2",
      "x": "7030.008",
      "y": "8542.25"
    },
    {
      "rotation": 90,
      "typeId": "t3",
      "x": "16117.057",
      "y": "12873.43"
    },
    {
      "rotation": 90,
      "typeId": "t3",
      "x": "16142.025",
      "y": "16631.055"
    },
    {
      "rotation": 90,
      "typeId": "t3",
      "x": "16172.4619",
      "y": "0.039916992"
    },
    {
      "rotation": 270,
      "typeId": "t3",
      "x": "13554.31",
      "y": "16241.8"
    },
    {
      "rotation": 270,
      "typeId": "t3",
      "x": "13613.533",
      "y": "19610.777"
    },
    {
      "rotation": 0,
      "typeId": "t4",
      "x": "7050.693",
      "y": "21.866768"
    },
    {
      "rotation": 90,
      "typeId": "t4",
      "x": "16141.802",
      "y": "5210.6094"
    },
    {
      "rotation": 180,
      "typeId": "t4",
      "x": "7662.1357",
      "y": "19999.9"
    },
    {
      "rotation": 270,
      "typeId": "t4",
      "x": "0.0075683594",
      "y": "7662.0066"
    },
    {
      "rotation": 270,
      "typeId": "t4",
      "x": "0.226621",
      "y": "15325.195"
    },
    {
      "rotation": 0,
      "typeId": "t5",
      "x": "3121.0687",
      "y": "10551.242"
    },
    {
      "rotation": 0,
      "typeId": "t5",
      "x": "7512.8923",
      "y": "3644.462"
    },
    {
      "rotation": 90,
      "typeId": "t5",
      "x": "9689.268",
      "y": "14659.905"
    },
    {
      "rotation": 180,
      "typeId": "t5",
      "x": "16176.8923",
      "y": "5460.5815"
    },
    {
      "rotation": 270,
      "typeId": "t5",
      "x": "7455.521",
      "y": "3487.8422"
    },
    {
      "rotation": 0,
      "typeId": "t6",
      "x": "8691.825",
      "y": "18949.924"
    },
    {
      "rotation": 90,
      "typeId": "t6",
      "x": "2340.395",
      "y": "15208.393"
    },
    {
      "rotation": 90,
      "typeId": "t6",
      "x": "13012.495",
      "y": "8627.4"
    },
    {
      "rotation": 180,
      "typeId": "t6",
      "x": "4073.4349",
      "y": "6536.1056"
    },
    {
      "rotation": 270,
      "typeId": "t6",
      "x": "11833.543",
      "y": "11964.105"
    },
    {
      "rotation": 0,
      "typeId": "t7",
      "x": "11136.127",
      "y": "11947.286"
    },
    {
      "rotation": 90,
      "typeId": "t7",
      "x": "11650.078",
      "y": "18467.855"
    },
    {
      "rotation": 90,
      "typeId": "t7",
      "x": "13631.062",
      "y": "5878.1064"
    },
    {
      "rotation": 180,
      "typeId": "t7",
      "x": "9025.28",
      "y": "7034.82"
    },
    {
      "rotation": 270,
      "typeId": "t7",
      "x": "0.26257324",
      "y": "16851.88"
    },
    {
      "rotation": 0,
      "typeId": "t8",
      "x": "3120.8728",
      "y": "2156.1348"
    },
    {
      "rotation": 0,
      "typeId": "t8",
      "x": "9109.947",
      "y": "11933.715"
    },
    {
      "rotation": 90,
      "typeId": "t8",
      "x": "13658.189",
      "y": "7410.749"
    },
    {
      "rotation": 270,
      "typeId": "t8",
      "x": "3967.1253",
      "y": "6312.5836"
    },
    {
      "rotation": 270,
      "typeId": "t8",
      "x": "4398.348",
      "y": "15612.374"
    },
    {
      "rotation": 0,
      "typeId": "t9",
      "x": "3092.8097",
      "y": "81.23071"
    },
    {
      "rotation": 0,
      "typeId": "t9",
      "x": "9185.76",
      "y": "12745.366"
    },
    {
      "rotation": 90,
      "typeId": "t9",
      "x": "7790.705",
      "y": "14871.91"
    },
    {
      "rotation": 90,
      "typeId": "t9",
      "x": "9461.071",
      "y": "10495.854"
    },
    {
      "rotation": 270,
      "typeId": "t9",
      "x": "3912.7524",
      "y": "9880.816"
    }
  ],
  "problemKey": "V09",
  "schemaVersion": "1"
}
Submission format and technical detailsOpen this when you are ready to prepare a JSON answer

Instance parameters

{
  "case": "gardeyn1"
}

The current leader's answer

{
  "instanceId": "v09-gardeyn1-v1",
  "placements": [
    {
      "rotation": 0,
      "typeId": "t0",
      "x": "8402.8923",
      "y": "3143.713"
    },
    {
      "rotation": 90,
      "typeId": "t0",
      "x": "7512.8923",
      "y": "323.3301"
    },
    {
      "rotation": 90,
      "typeId": "t0",
      "x": "11830.55",
      "y": "5684.8635"
    },
    {
      "rotation": 90,
      "typeId": "t0",
      "x": "13613.341",
      "y": "13113.829"
    },
    {
      "rotation": 180,
      "typeId": "t0",
      "x": "9324.816",
      "y": "14931.517"
    },
    {
      "rotation": 0,
      "typeId": "t1",
      "x": "3122.1805",
      "y": "7473.209"
    },
    {
      "rotation": 0,
      "typeId": "t1",
      "x": "11572.971",
      "y": "5622.589"
    },
    {
      "rotation": 90,
      "typeId": "t1",
      "x": "6817.1535",
      "y": "7192.511"
    },
    {
      "rotation": 270,
      "typeId": "t1",
      "x": "2563.269",
      "y": "7331.8044"
    },
    {
      "rotation": 270,
      "typeId": "t1",
      "x": "5051.2073",
      "y": "17520.593"
    },
    {
      "rotation": 90,
      "typeId": "t2",
      "x": "9025.2895",
      "y": "9139.4"
    },
    {
      "rotation": 90,
      "typeId": "t2",
      "x": "9984.072",
      "y": "17403.58"
    },
    {
      "rotation": 180,
      "typeId": "t2",
      "x": "9827.209",
      "y": "17892.098"
    },
    {
      "rotation": 270,
      "typeId": "t2",
      "x": "4339.8555",
      "y": "11234.661"
    },
    {
      "rotation": 270,
      "typeId": "t2",
      "x": "7030.008",
      "y": "8542.25"
    },
    {
      "rotation": 90,
      "typeId": "t3",
      "x": "16117.057",
      "y": "12873.43"
    },
    {
      "rotation": 90,
      "typeId": "t3",
      "x": "16142.025",
      "y": "16631.055"
    },
    {
      "rotation": 90,
      "typeId": "t3",
      "x": "16172.4619",
      "y": "0.039916992"
    },
    {
      "rotation": 270,
      "typeId": "t3",
      "x": "13554.31",
      "y": "16241.8"
    },
    {
      "rotation": 270,
      "typeId": "t3",
      "x": "13613.533",
      "y": "19610.777"
    },
    {
      "rotation": 0,
      "typeId": "t4",
      "x": "7050.693",
      "y": "21.866768"
    },
    {
      "rotation": 90,
      "typeId": "t4",
      "x": "16141.802",
      "y": "5210.6094"
    },
    {
      "rotation": 180,
      "typeId": "t4",
      "x": "7662.1357",
      "y": "19999.9"
    },
    {
      "rotation": 270,
      "typeId": "t4",
      "x": "0.0075683594",
      "y": "7662.0066"
    },
    {
      "rotation": 270,
      "typeId": "t4",
      "x": "0.226621",
      "y": "15325.195"
    },
    {
      "rotation": 0,
      "typeId": "t5",
      "x": "3121.0687",
      "y": "10551.242"
    },
    {
      "rotation": 0,
      "typeId": "t5",
      "x": "7512.8923",
      "y": "3644.462"
    },
    {
      "rotation": 90,
      "typeId": "t5",
      "x": "9689.268",
      "y": "14659.905"
    },
    {
      "rotation": 180,
      "typeId": "t5",
      "x": "16176.8923",
      "y": "5460.5815"
    },
    {
      "rotation": 270,
      "typeId": "t5",
      "x": "7455.521",
      "y": "3487.8422"
    },
    {
      "rotation": 0,
      "typeId": "t6",
      "x": "8691.825",
      "y": "18949.924"
    },
    {
      "rotation": 90,
      "typeId": "t6",
      "x": "2340.395",
      "y": "15208.393"
    },
    {
      "rotation": 90,
      "typeId": "t6",
      "x": "13012.495",
      "y": "8627.4"
    },
    {
      "rotation": 180,
      "typeId": "t6",
      "x": "4073.4349",
      "y": "6536.1056"
    },
    {
      "rotation": 270,
      "typeId": "t6",
      "x": "11833.543",
      "y": "11964.105"
    },
    {
      "rotation": 0,
      "typeId": "t7",
      "x": "11136.127",
      "y": "11947.286"
    },
    {
      "rotation": 90,
      "typeId": "t7",
      "x": "11650.078",
      "y": "18467.855"
    },
    {
      "rotation": 90,
      "typeId": "t7",
      "x": "13631.062",
      "y": "5878.1064"
    },
    {
      "rotation": 180,
      "typeId": "t7",
      "x": "9025.28",
      "y": "7034.82"
    },
    {
      "rotation": 270,
      "typeId": "t7",
      "x": "0.26257324",
      "y": "16851.88"
    },
    {
      "rotation": 0,
      "typeId": "t8",
      "x": "3120.8728",
      "y": "2156.1348"
    },
    {
      "rotation": 0,
      "typeId": "t8",
      "x": "9109.947",
      "y": "11933.715"
    },
    {
      "rotation": 90,
      "typeId": "t8",
      "x": "13658.189",
      "y": "7410.749"
    },
    {
      "rotation": 270,
      "typeId": "t8",
      "x": "3967.1253",
      "y": "6312.5836"
    },
    {
      "rotation": 270,
      "typeId": "t8",
      "x": "4398.348",
      "y": "15612.374"
    },
    {
      "rotation": 0,
      "typeId": "t9",
      "x": "3092.8097",
      "y": "81.23071"
    },
    {
      "rotation": 0,
      "typeId": "t9",
      "x": "9185.76",
      "y": "12745.366"
    },
    {
      "rotation": 90,
      "typeId": "t9",
      "x": "7790.705",
      "y": "14871.91"
    },
    {
      "rotation": 90,
      "typeId": "t9",
      "x": "9461.071",
      "y": "10495.854"
    },
    {
      "rotation": 270,
      "typeId": "t9",
      "x": "3912.7524",
      "y": "9880.816"
    }
  ],
  "problemKey": "V09",
  "schemaVersion": "1"
}

Submit {schemaVersion: "1", problemKey: "V09", instanceId, placements}, where instanceId is the id in the case's instance file (v09-gardeyn2-v1, say). placements has one entry {typeId, rotation, x, y} per copy of a piece: typeId names the piece type, rotation is 0, 90, 180 or 270, and x, y are decimal strings (at most 24 fractional digits, absolute value at most 1000000) — the piece is turned about its own origin, then shifted. Each type must occur exactly as many times as demanded; the order of the array does not matter. The piece shapes, the strip height and the demands can be downloaded from the editor; they are not part of the answer. · Verifier v1.0.0

DISCUSSION

Discussion

Talk strategy, share methods, ask why you are stuck. Every signed-in user can post. Posts carry your public byline, the same name your records use; the #number after it is the account's signup ordinal, so a name cannot be worn by someone else. New posts appear after an automated review.