訂明本例驗收任務
假設候選接收記錄編號須為非全空白文字,原樣比較,核對前保留每次出現。欠編號或不是文字便暫停;空批次在此接收關卡仍有效。先數全部次數,才可轉成對照表。即使後一筆正確,重複仍拒整批;也未批准首筆優先。列重複編號及次數。
- 保留每次候選出現
- 轉對照表前先數次數
- 列重複鍵及次數並拒絕
重複鍵須另提供嘗試編號或修檔案。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 後正確答案會覆寫前筆 | {"rows":[{"id":"C1","answer":"wrong"},{"id":"C1","answer":"correct"}]} | {"duplicates":[{"id":"C1","count":2}],"accepted":false} | 兩次都是依據,評分前不得互相取代。 |
| 兩個不同個案 | {"rows":[{"id":"C1","answer":"wrong"},{"id":"C2","answer":"correct"}]} | {"duplicates":[],"accepted":true} | 鍵不重複可接收;C1 錯答案仍待內容評分。 |
| 候選欠有效個案鍵 | {"rows":[{}]} | {"error":"case-identity"} | 欠鍵不能當作一個不同候選編號接受。 |
| 兩個編號各自重複 | {"rows":[{"id":"B"},{"id":"A"},{"id":"B"},{"id":"A"},{"id":"A"}]} | {"duplicates":[{"id":"A","count":3},{"id":"B","count":2}],"accepted":false} | A 三次、B 兩次各自保留,不只報一個重複總數。 |
逐步處理 multiple-duplicates 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"duplicates":[{"id":"A","count":3},{"id":"B","count":2}],"accepted":false}。A 三次、B 兩次各自保留,不只報一個重複總數。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(x.rows.some(row=>typeof row.id!=='string'||!row.id.trim()))return {error:'case-identity'};
const counts=new Map();for(const row of x.rows)counts.set(row.id,(counts.get(row.id)||0)+1);
const duplicates=[...counts].filter(([,n])=>n>1).sort(([a],[b])=>a<b?-1:a>b?1:0).map(([id,count])=>({id,count}));return {duplicates,accepted:duplicates.length===0};
}
const cases = [
{
"id": "late-correct-overwrite",
"input": {
"rows": [
{
"id": "C1",
"answer": "wrong"
},
{
"id": "C1",
"answer": "correct"
}
]
},
"expected": {
"duplicates": [
{
"id": "C1",
"count": 2
}
],
"accepted": false
}
},
{
"id": "two-unique-cases",
"input": {
"rows": [
{
"id": "C1",
"answer": "wrong"
},
{
"id": "C2",
"answer": "correct"
}
]
},
"expected": {
"duplicates": [],
"accepted": true
}
},
{
"id": "case-key-absent",
"input": {
"rows": [
{}
]
},
"expected": {
"error": "case-identity"
}
},
{
"id": "multiple-duplicates",
"input": {
"rows": [
{
"id": "B"
},
{
"id": "A"
},
{
"id": "B"
},
{
"id": "A"
},
{
"id": "A"
}
]
},
"expected": {
"duplicates": [
{
"id": "A",
"count": 3
},
{
"id": "B",
"count": 2
}
],
"accepted": 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)}));
未改的出現記錄留給同事覆核。此檢查只管接收編號,沒有選較有利答案或報模型準確度。