跳至內容
Astera Technology

查出內容組裝把哪段依據擠走

沿指定組裝記錄,找出搜尋有但未能放入內容的必需段落。

下載完整個案資料及參考答案 ↓

訂明本例驗收任務

假設助手按原次序逐段放入內容;每段不可拆,放得下就保留,太大便略過繼續。大小用本例單位,不當作供應商 token。另提供必需段落編號;結果要列保留段落、餘額及被擠走的必需項。

  1. 沿提供次序查看
  2. 保留放得下段落並扣餘額
  3. 核對已放入的必需依據

大小無效便停止這次組裝核對。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
無關段落先放入{"budget":7,"blocks":[{"id":"A","size":4},{"id":"B","size":3},{"id":"C","size":2}],"required":["B","C"]}{"kept":["A","B"],"remaining":0,"missing":["C"]}搜尋有 C,但本例組裝在 C 前已用完七單位。
略過太大段落仍繼續{"budget":3,"blocks":[{"id":"A","size":4},{"id":"C","size":2}],"required":["C"]}{"kept":["C"],"remaining":1,"missing":[]}略過 A 不會停止;C 放得下,餘一單位。
段落大小為負數{"budget":3,"blocks":[{"id":"C","size":-1}],"required":["C"]}{"error":"size"}負數會虛增餘額,必須拒絕。
下載可編輯 CSV ↓

逐步處理 invalid-size 個案,須得到甚麼結果?原因是甚麼?

查看參考答案

{"error":"size"}。負數會虛增餘額,必須拒絕。

執行完整本機驗算

另存為 .mjs,以 Node.js 執行;只驗提供的個案
import assert from 'node:assert/strict';

function evaluate(x){
 if(!Number.isInteger(x.budget)||x.budget<0||x.blocks.some(b=>!Number.isInteger(b.size)||b.size<1))return {error:'size'};
 let remaining=x.budget;const kept=[];for(const b of x.blocks)if(b.size<=remaining){remaining-=b.size;kept.push(b.id);}
 return {kept,remaining,missing:x.required.filter(id=>!kept.includes(id)).sort()};
}

const cases = [
  {
    "id": "distractor-first",
    "input": {
      "budget": 7,
      "blocks": [
        {
          "id": "A",
          "size": 4
        },
        {
          "id": "B",
          "size": 3
        },
        {
          "id": "C",
          "size": 2
        }
      ],
      "required": [
        "B",
        "C"
      ]
    },
    "expected": {
      "kept": [
        "A",
        "B"
      ],
      "remaining": 0,
      "missing": [
        "C"
      ]
    }
  },
  {
    "id": "skip-large-continue",
    "input": {
      "budget": 3,
      "blocks": [
        {
          "id": "A",
          "size": 4
        },
        {
          "id": "C",
          "size": 2
        }
      ],
      "required": [
        "C"
      ]
    },
    "expected": {
      "kept": [
        "C"
      ],
      "remaining": 1,
      "missing": []
    }
  },
  {
    "id": "invalid-size",
    "input": {
      "budget": 3,
      "blocks": [
        {
          "id": "C",
          "size": -1
        }
      ],
      "required": [
        "C"
      ]
    },
    "expected": {
      "error": "size"
    }
  }
];
for (const c of cases) assert.deepEqual(evaluate(c.input), c.expected, c.id);
console.log(JSON.stringify({checked:cases.length,caseIds:cases.map(c=>c.id)}));
下載可執行例子 ↓

用這份記錄找出搜尋後在哪一步漏依據。改組裝方法就另訂規則及個案;此例沒有求最有價值的組合。

相關資源