跳至內容
Astera Technology

分清印好的選項與實際剔選

分清已剔、空白及看不清,剔選不明便保留待覆核。

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

訂明本例驗收任務

假設申請表每項剔選位已標為 marked、empty 或 obscured,且此表只容許一項。empty 是看到空白,obscured 是看不清。有看不清便未確認;全部清楚時才核對恰好一個剔選。

  1. 讀已標明的剔選狀態
  2. 有遮擋先待覆核
  3. 再核對恰好一個清楚剔選

無效標籤或看不清須覆核,不能預設為未選。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
一個清楚剔選{"options":[{"id":"delivery","state":"empty"},{"id":"collection","state":"marked"}]}{"status":"accepted","selected":["collection"],"unknown":[]}只剔 collection;印有 delivery 文字不代表選了。
另一格看不清{"options":[{"id":"collection","state":"marked"},{"id":"courier","state":"obscured"}]}{"status":"review","selected":["collection"],"unknown":["courier"]}courier 可能影響只可一項的要求,看到 collection 也未能定案。
全部格都看到空白{"options":[{"id":"delivery","state":"empty"},{"id":"collection","state":"empty"}]}{"status":"count-error","selected":[],"unknown":[]}已確認沒有選項,屬零項錯誤,與看不清分開。
下載可編輯 CSV ↓

逐步處理 nothing-selected 個案,須得到甚麼結果?原因是甚麼?

查看參考答案

{"status":"count-error","selected":[],"unknown":[]}。已確認沒有選項,屬零項錯誤,與看不清分開。

執行完整本機驗算

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

function evaluate(x){
 if(x.options.some(o=>!['marked','empty','obscured'].includes(o.state)))return {status:'invalid',selected:[]};
 const selected=x.options.filter(o=>o.state==='marked').map(o=>o.id),unknown=x.options.filter(o=>o.state==='obscured').map(o=>o.id);
 return {status:unknown.length?'review':selected.length===1?'accepted':'count-error',selected,unknown};
}

const cases = [
  {
    "id": "one-observed-mark",
    "input": {
      "options": [
        {
          "id": "delivery",
          "state": "empty"
        },
        {
          "id": "collection",
          "state": "marked"
        }
      ]
    },
    "expected": {
      "status": "accepted",
      "selected": [
        "collection"
      ],
      "unknown": []
    }
  },
  {
    "id": "obscured-second",
    "input": {
      "options": [
        {
          "id": "collection",
          "state": "marked"
        },
        {
          "id": "courier",
          "state": "obscured"
        }
      ]
    },
    "expected": {
      "status": "review",
      "selected": [
        "collection"
      ],
      "unknown": [
        "courier"
      ]
    }
  },
  {
    "id": "nothing-selected",
    "input": {
      "options": [
        {
          "id": "delivery",
          "state": "empty"
        },
        {
          "id": "collection",
          "state": "empty"
        }
      ]
    },
    "expected": {
      "status": "count-error",
      "selected": [],
      "unknown": []
    }
  }
];
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)}));
下載可執行例子 ↓

剔選觀察與選項一起保留。本例由同事提供觀察狀態,沒有聲稱圖片辨識準確度。

相關資源