跳至內容
Astera Technology

找出搜尋結果第一份可用程序

用明訂倒數位置算式核對首個可用結果,找不到與未有觀察分開。

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

訂明本例驗收任務

假設程序搜尋的可用文件編號已標明,最多十題、每題最多十個結果。本例自訂:第一份可用文件排第 r 位,該題取 1/r;找不到取零,再計題目平均。位置由一開始,答案用確切分數;這是自訂計分法,不是實測表現或發布門檻。

  1. 逐題找第一個可用位置
  2. 找不到的題目取零
  3. 按確切倒數計平均

先標明可用文件,才可計分。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
分別排第二及第四{"queries":[{"hits":["X","D"],"usable":["D"]},{"hits":["A","B","C","E"],"usable":["E"]}]}{"ranks":[2,4],"numerator":3,"denominator":8}(1/2+1/4)÷2=3/8。
其中一題找不到{"queries":[{"hits":["D"],"usable":["D"]},{"hits":["X"],"usable":["E"]}]}{"ranks":[1,null],"numerator":1,"denominator":2}未找到那題取零,但仍計入兩題平均。
結果空白卻欠可用標籤清單{"queries":[{"hits":[]}]}{"error":"usable-labels"}結果空白不能把欠可用標籤清單當成已知零分。
沒有問題記錄{"queries":[]}{"ranks":[],"numerator":0,"denominator":0}沒有題目記錄便沒有平均值,不能報滿分。
下載可編輯 CSV ↓

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

查看參考答案

{"ranks":[],"numerator":0,"denominator":0}。沒有題目記錄便沒有平均值,不能報滿分。

執行完整本機驗算

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

function evaluate(x){
 if(!Array.isArray(x.queries)||x.queries.some(q=>!q||!Array.isArray(q.hits)||!Array.isArray(q.usable)))return {error:'usable-labels'};
 if(x.queries.length>10||x.queries.some(q=>q.hits.length>10))return {error:'score-bounds'};
 const gcd=(a,b)=>b?gcd(b,a%b):a;let n=0,d=1;
 const ranks=x.queries.map(q=>{const i=q.hits.findIndex(id=>q.usable.includes(id));return i<0?null:i+1;});
 for(const r of ranks)if(r){n=n*r+d;d*=r;const g=gcd(n,d);n/=g;d/=g;}
 if(!ranks.length)return {ranks,numerator:0,denominator:0};
 d*=ranks.length;const g=gcd(n,d);return {ranks,numerator:n/g,denominator:d/g};
}

const cases = [
  {
    "id": "two-ranks",
    "input": {
      "queries": [
        {
          "hits": [
            "X",
            "D"
          ],
          "usable": [
            "D"
          ]
        },
        {
          "hits": [
            "A",
            "B",
            "C",
            "E"
          ],
          "usable": [
            "E"
          ]
        }
      ]
    },
    "expected": {
      "ranks": [
        2,
        4
      ],
      "numerator": 3,
      "denominator": 8
    }
  },
  {
    "id": "one-miss",
    "input": {
      "queries": [
        {
          "hits": [
            "D"
          ],
          "usable": [
            "D"
          ]
        },
        {
          "hits": [
            "X"
          ],
          "usable": [
            "E"
          ]
        }
      ]
    },
    "expected": {
      "ranks": [
        1,
        null
      ],
      "numerator": 1,
      "denominator": 2
    }
  },
  {
    "id": "missing-usable-channel",
    "input": {
      "queries": [
        {
          "hits": []
        }
      ]
    },
    "expected": {
      "error": "usable-labels"
    }
  },
  {
    "id": "no-queries",
    "input": {
      "queries": []
    },
    "expected": {
      "ranks": [],
      "numerator": 0,
      "denominator": 0
    }
  }
];
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)}));
下載可執行例子 ↓

結果次序、可用標籤及算式一併保留。位置分數高,不代表答案正確、文件最新或同事已完成任務。

相關資源