跳至內容
Astera Technology

格式修正要有次數上限,也要保留資料

核最多兩次格式修正仍保留已核實編碼,次數用完有明示結果。

下載完整個案資料及參考答案 ↓

訂明本例驗收任務

假設本機格式修正最多兩次,先有已核實的非空文字編碼,每次也須有非空文字編碼及布林格式標籤。編碼完全相同,格式為真才完成;即使格式對,改了編碼仍是依據錯誤。兩次都無效便停止,之後的記錄不當作容許範圍內的嘗試。

  1. 最多查看兩次修正
  2. 先核保留資料,再看格式
  3. 列完成或停止原因

改了已核實資料便停止,次數用完仍錯交同事覆核。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
第二次格式修好{"verifiedCode":"K7","attempts":[{"code":"K7","valid":false},{"code":"K7","valid":true}]}{"status":"complete","attemptsUsed":2}第二次在上限內通過,並保留 K7。
格式好了卻改編碼{"verifiedCode":"K7","attempts":[{"code":"K9","valid":true}]}{"status":"fact-changed","attemptsUsed":1}格式有效不能批准替換已核實資料。
文字 false 不是格式布林{"verifiedCode":"K7","attempts":[{"code":"K7","valid":"false"}]}{"status":"invalid-format-label","attemptsUsed":1}文字 false 不能按真值當已完成依據。
兩個編碼都未具備{"attempts":[{"valid":true}]}{"status":"missing-code-evidence","attemptsUsed":0}undefined 相同不是保留已核實編碼的依據。
該次欠保留編碼{"verifiedCode":"K7","attempts":[{"valid":true}]}{"status":"missing-code-evidence","attemptsUsed":1}格式為真也不能完成欠保留編碼的嘗試。
第三次超過上限{"verifiedCode":"K7","attempts":[{"code":"K7","valid":false},{"code":"K7","valid":false},{"code":"K7","valid":true}]}{"status":"stopped","attemptsUsed":2}第三次雖成功,也超出本例兩次規則。
下載可編輯 CSV ↓

逐步處理 third-attempt-too-late 個案,須得到甚麼結果?原因是甚麼?

查看參考答案

{"status":"stopped","attemptsUsed":2}。第三次雖成功,也超出本例兩次規則。

執行完整本機驗算

另存為 .mjs,以 Node.js 執行;只驗提供的個案
import assert from 'node:assert/strict';

function evaluate(x){
 if(typeof x.verifiedCode!=='string'||!x.verifiedCode.trim())return {status:'missing-code-evidence',attemptsUsed:0};
 for(let i=0;i<Math.min(2,x.attempts.length);i++){const a=x.attempts[i];if(typeof a.code!=='string'||!a.code.trim())return {status:'missing-code-evidence',attemptsUsed:i+1};if(a.code!==x.verifiedCode)return {status:'fact-changed',attemptsUsed:i+1};if(typeof a.valid!=='boolean')return {status:'invalid-format-label',attemptsUsed:i+1};if(a.valid)return {status:'complete',attemptsUsed:i+1};}
 return {status:x.attempts.length>=2?'stopped':'needs-next-attempt',attemptsUsed:Math.min(2,x.attempts.length)};
}

const cases = [
  {
    "id": "second-format-pass",
    "input": {
      "verifiedCode": "K7",
      "attempts": [
        {
          "code": "K7",
          "valid": false
        },
        {
          "code": "K7",
          "valid": true
        }
      ]
    },
    "expected": {
      "status": "complete",
      "attemptsUsed": 2
    }
  },
  {
    "id": "format-pass-fact-change",
    "input": {
      "verifiedCode": "K7",
      "attempts": [
        {
          "code": "K9",
          "valid": true
        }
      ]
    },
    "expected": {
      "status": "fact-changed",
      "attemptsUsed": 1
    }
  },
  {
    "id": "text-format-label",
    "input": {
      "verifiedCode": "K7",
      "attempts": [
        {
          "code": "K7",
          "valid": "false"
        }
      ]
    },
    "expected": {
      "status": "invalid-format-label",
      "attemptsUsed": 1
    }
  },
  {
    "id": "verified-code-absent",
    "input": {
      "attempts": [
        {
          "valid": true
        }
      ]
    },
    "expected": {
      "status": "missing-code-evidence",
      "attemptsUsed": 0
    }
  },
  {
    "id": "attempt-code-absent",
    "input": {
      "verifiedCode": "K7",
      "attempts": [
        {
          "valid": true
        }
      ]
    },
    "expected": {
      "status": "missing-code-evidence",
      "attemptsUsed": 1
    }
  },
  {
    "id": "third-attempt-too-late",
    "input": {
      "verifiedCode": "K7",
      "attempts": [
        {
          "code": "K7",
          "valid": false
        },
        {
          "code": "K7",
          "valid": false
        },
        {
          "code": "K7",
          "valid": true
        }
      ]
    },
    "expected": {
      "status": "stopped",
      "attemptsUsed": 2
    }
  }
];
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)}));
下載可執行例子 ↓

保留各次容許嘗試及候選結果。此本機流程不涉及網絡重試、供應商時間或模型可靠度;增加次數便是改規則。

相關資源