訂明本例驗收任務
假設生成清單按無序集合評,但輸出每項只可一次。預期編號不重複;欠項、多項及候選重複分開列。換次序可通過,不能先轉集合而把重複問題藏起。
- 記錄候選各項次數
- 雙向比不同成員
- 次序與重複分開評
若重複有意義,須明訂另一輸出規則。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 同集合換次序 | {"expected":["A","B"],"answer":["B","A"]} | {"missing":[],"extra":[],"duplicates":[],"pass":true} | 無序成員相同,也沒有重複。 |
| 轉集合會藏起重複 | {"expected":["A","B"],"answer":["A","A","B"]} | {"missing":[],"extra":[],"duplicates":["A"],"pass":false} | 成員雖對,重複 A 不符合只可一次。 |
| 預期定義重複編號 | {"expected":["A","A"],"answer":["A"]} | {"error":"expected-set-definition"} | 預期編號重複令集合定義無效,不能讓候選通過。 |
| 欠一項及多一項 | {"expected":["A","B"],"answer":["A","C"]} | {"missing":["B"],"extra":["C"],"duplicates":[],"pass":false} | C 不能替代所需 B;兩種問題都列出。 |
逐步處理 missing-extra 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"missing":["B"],"extra":["C"],"duplicates":[],"pass":false}。C 不能替代所需 B;兩種問題都列出。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(new Set(x.expected).size!==x.expected.length)return {error:'expected-set-definition'};
const seen=[...new Set(x.answer)].sort(),duplicates=seen.filter(k=>x.answer.filter(v=>v===k).length>1),missing=x.expected.filter(k=>!seen.includes(k)).sort(),extra=seen.filter(k=>!x.expected.includes(k));
return {missing,extra,duplicates,pass:missing.length+extra.length+duplicates.length===0};
}
const cases = [
{
"id": "permuted-set",
"input": {
"expected": [
"A",
"B"
],
"answer": [
"B",
"A"
]
},
"expected": {
"missing": [],
"extra": [],
"duplicates": [],
"pass": true
}
},
{
"id": "repeat-hidden-by-set",
"input": {
"expected": [
"A",
"B"
],
"answer": [
"A",
"A",
"B"
]
},
"expected": {
"missing": [],
"extra": [],
"duplicates": [
"A"
],
"pass": false
}
},
{
"id": "duplicate-expected-id",
"input": {
"expected": [
"A",
"A"
],
"answer": [
"A"
]
},
"expected": {
"error": "expected-set-definition"
}
},
{
"id": "missing-extra",
"input": {
"expected": [
"A",
"B"
],
"answer": [
"A",
"C"
]
},
"expected": {
"missing": [
"B"
],
"extra": [
"C"
],
"duplicates": [],
"pass": false
}
}
];
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)}));
模型列類別或程序編號而沒有排名時可用此驗算。排名答案或有序操作記錄不適用集合準則。