訂明本例驗收任務
假設草擬指示須把指定佔位文字原樣出現恰好一次。按大小寫及字元逐一數假設草稿;HTML 轉義文字或虛構完成編號都不是同一字面值。檢查器不代填任何資料。
- 保留原字面目標
- 數完全相同且不重疊的出現
- 核對恰好一次
目標空白屬無效驗收定義。
使用已填個案
| 個案 | 已提供輸入 | 預期結構化結果 | 判斷及原因 |
|---|---|---|---|
| 所需字樣保留一次 | {"literal":"{CASE_ID}","draft":"Open case {CASE_ID} after review."} | {"count":1,"retainedOnce":true} | 草稿顯示佔位字樣,沒有編造個案值。 |
| 佔位字樣被虛構編號取代 | {"literal":"{CASE_ID}","draft":"Open case C99 after review."} | {"count":0,"retainedOnce":false} | C99 沒有保留指定原字樣。 |
| 佔位字樣重複兩次 | {"literal":"{CASE_ID}","draft":"{CASE_ID} follows {CASE_ID}."} | {"count":2,"retainedOnce":false} | 有保留也不夠;本要求須恰好一次。 |
逐步處理 repeated-placeholder 個案,須得到甚麼結果?原因是甚麼?
查看參考答案
{"count":2,"retainedOnce":false}。有保留也不夠;本要求須恰好一次。
執行完整本機驗算
import assert from 'node:assert/strict';
function evaluate(x){
if(!x.literal.length)return {error:'empty-literal'};let count=0,pos=0;
while((pos=x.draft.indexOf(x.literal,pos))!==-1){count++;pos+=x.literal.length;}
return {count,retainedOnce:count===1};
}
const cases = [
{
"id": "literal-once",
"input": {
"literal": "{CASE_ID}",
"draft": "Open case {CASE_ID} after review."
},
"expected": {
"count": 1,
"retainedOnce": true
}
},
{
"id": "invented-value",
"input": {
"literal": "{CASE_ID}",
"draft": "Open case C99 after review."
},
"expected": {
"count": 0,
"retainedOnce": false
}
},
{
"id": "repeated-placeholder",
"input": {
"literal": "{CASE_ID}",
"draft": "{CASE_ID} follows {CASE_ID}."
},
"expected": {
"count": 2,
"retainedOnce": 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)}));
草稿、目標字樣及次數要求一起保存。字面核對不評其餘意思,也未批准對外發送。