訂明本例驗收任務
假設摘取要求是按來源原次序列不同編號。成員與次序分開核對;擅自重排可能齊成員卻次序失敗。來源或候選編號重複都不符合此清單要求;不自動排序後才接受。
- 核對編號不重複要求
- 成員另行比對
- 不排序,直接比原位置
重複編號須用可分辨每次出現的資料集,不適用此規則。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 未要求卻排序 | {"source":["C","A","B"],"answer":["A","B","C"]} | {"membership":true,"order":false} | 全部編號仍在,卻漏了指定 C、A、B 原次序。 |
| 保留來源次序 | {"source":["C","A","B"],"answer":["C","A","B"]} | {"membership":true,"order":true} | 成員及位置都相同。 |
| 答案重複一個編號 | {"source":["C","A","B"],"answer":["C","A","A","B"]} | {"error":"duplicate-id"} | 先拒絕重複 A,不進入次序評分;排序也不能修。 |
逐步處理 duplicate-answer 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"error":"duplicate-id"}。先拒絕重複 A,不進入次序評分;排序也不能修。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(new Set(x.source).size!==x.source.length||new Set(x.answer).size!==x.answer.length)return {error:'duplicate-id'};
const membership=x.source.length===x.answer.length&&x.source.every(id=>x.answer.includes(id));
return {membership,order:membership&&x.source.every((id,i)=>x.answer[i]===id)};
}
const cases = [
{
"id": "unrequested-sort",
"input": {
"source": [
"C",
"A",
"B"
],
"answer": [
"A",
"B",
"C"
]
},
"expected": {
"membership": true,
"order": false
}
},
{
"id": "source-order-retained",
"input": {
"source": [
"C",
"A",
"B"
],
"answer": [
"C",
"A",
"B"
]
},
"expected": {
"membership": true,
"order": true
}
},
{
"id": "duplicate-answer",
"input": {
"source": [
"C",
"A",
"B"
],
"answer": [
"C",
"A",
"A",
"B"
]
},
"expected": {
"error": "duplicate-id"
}
}
];
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)}));
答案鍵保留來源次序。即使字母排序較整齊,也須保留指定順序;成員通過不能寫成次序也通過。