跳至內容
Astera Technology

評無序結果時仍要核對重複

換次序可通過無序要求,重複候選卻不能轉集合後藏起。

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

訂明本例驗收任務

假設生成清單按無序集合評,但輸出每項只可一次。預期編號不重複;欠項、多項及候選重複分開列。換次序可通過,不能先轉集合而把重複問題藏起。

  1. 記錄候選各項次數
  2. 雙向比不同成員
  3. 次序與重複分開評

若重複有意義,須明訂另一輸出規則。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
同集合換次序{"expected":["A","B"],"answer":["B","A"]}{"missing":[],"extra":[],"duplicates":[],"pass":true}無序成員相同,也沒有重複。
轉集合會藏起重複{"expected":["A","B"],"answer":["A","A","B"]}{"missing":[],"extra":[],"duplicates":["A"],"pass":false}成員雖對,重複 A 不符合只可一次。
預期定義重複編號{"expected":["A","A"],"answer":["A"]}{"error":"expected-set-definition"}預期編號重複令集合定義無效,不能讓候選通過。
欠一項及多一項{"expected":["A","B"],"answer":["A","C"]}{"missing":["B"],"extra":["C"],"duplicates":[],"pass":false}C 不能替代所需 B;兩種問題都列出。
下載可編輯 CSV ↓

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

查看參考答案

{"missing":["B"],"extra":["C"],"duplicates":[],"pass":false}。C 不能替代所需 B;兩種問題都列出。

執行完整本機驗算

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

function evaluate(x){
 if(new Set(x.expected).size!==x.expected.length)return {error:'expected-set-definition'};
 const seen=[...new Set(x.answer)].sort(),duplicates=seen.filter(k=>x.answer.filter(v=>v===k).length>1),missing=x.expected.filter(k=>!seen.includes(k)).sort(),extra=seen.filter(k=>!x.expected.includes(k));
 return {missing,extra,duplicates,pass:missing.length+extra.length+duplicates.length===0};
}

const cases = [
  {
    "id": "permuted-set",
    "input": {
      "expected": [
        "A",
        "B"
      ],
      "answer": [
        "B",
        "A"
      ]
    },
    "expected": {
      "missing": [],
      "extra": [],
      "duplicates": [],
      "pass": true
    }
  },
  {
    "id": "repeat-hidden-by-set",
    "input": {
      "expected": [
        "A",
        "B"
      ],
      "answer": [
        "A",
        "A",
        "B"
      ]
    },
    "expected": {
      "missing": [],
      "extra": [],
      "duplicates": [
        "A"
      ],
      "pass": false
    }
  },
  {
    "id": "duplicate-expected-id",
    "input": {
      "expected": [
        "A",
        "A"
      ],
      "answer": [
        "A"
      ]
    },
    "expected": {
      "error": "expected-set-definition"
    }
  },
  {
    "id": "missing-extra",
    "input": {
      "expected": [
        "A",
        "B"
      ],
      "answer": [
        "A",
        "C"
      ]
    },
    "expected": {
      "missing": [
        "B"
      ],
      "extra": [
        "C"
      ],
      "duplicates": [],
      "pass": 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)}));
下載可執行例子 ↓

模型列類別或程序編號而沒有排名時可用此驗算。排名答案或有序操作記錄不適用集合準則。

相關資源