訂明本例驗收任務
假設評分匯出以個案與原因碼每對一行。沒有錯誤的個案仍出一行 pass,原因留空。每題原因碼不可重複,重複便先拒結果;輸出行表供 CSV 寫入,不把原因合成難拆字串。
- 核每題原因不重複
- 每個案原因對展開一行
- 通過個案也明示一行
原因碼重複,匯出前修診斷資料。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 兩個不同失敗原因 | {"cases":[{"id":"C1","failures":["fieldA","fieldB"]}]} | {"rows":[["C1","fail","fieldA"],["C1","fail","fieldB"]]} | 兩原因各佔一行,沿用同一個案編號。 |
| 通過個案仍可見 | {"cases":[{"id":"C2","failures":[]}]} | {"rows":[["C2","pass",""]]} | 沒有失敗也保留該題,不從匯出消失。 |
| 原因碼重複 | {"cases":[{"id":"C1","failures":["fieldA","fieldA"]}]} | {"error":"duplicate-reason"} | 重複 fieldA 是診斷集合錯誤,不是兩個獨立失敗。 |
逐步處理 duplicate-reason-code 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"error":"duplicate-reason"}。重複 fieldA 是診斷集合錯誤,不是兩個獨立失敗。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(x.cases.some(c=>new Set(c.failures).size!==c.failures.length))return {error:'duplicate-reason'};
return {rows:x.cases.flatMap(c=>c.failures.length?c.failures.map(reason=>[c.id,'fail',reason]):[[c.id,'pass','']])};
}
const cases = [
{
"id": "two-independent-reasons",
"input": {
"cases": [
{
"id": "C1",
"failures": [
"fieldA",
"fieldB"
]
}
]
},
"expected": {
"rows": [
[
"C1",
"fail",
"fieldA"
],
[
"C1",
"fail",
"fieldB"
]
]
}
},
{
"id": "pass-still-visible",
"input": {
"cases": [
{
"id": "C2",
"failures": []
}
]
},
"expected": {
"rows": [
[
"C2",
"pass",
""
]
]
}
},
{
"id": "duplicate-reason-code",
"input": {
"cases": [
{
"id": "C1",
"failures": [
"fieldA",
"fieldA"
]
}
]
},
"expected": {
"error": "duplicate-reason"
}
}
];
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)}));
把這些行寫成 CSV 時另加合適引號。此例只定行單位,不聲稱已防任意試算表公式,也沒有匯出到其他系統。