跳至內容
Astera Technology

分開按個案與按嘗試次數計分

分按個案等權及合嘗試次數比例,不讓容易題多試次掩蓋其他題。

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

訂明本例驗收任務

假設重複作答清單每題列通過及嘗試數。按嘗試計便合全部次數;按個案計則每題比例等權平均。用約分後確切分數,分子分母以十進文字輸出。個案1至100題,每題嘗試1至10000次,通過數介乎零與嘗試數,不刪不利嘗試。

  1. 核各題有限數量對
  2. 按嘗試合成一比例
  3. 另把各題比例等權平均

零嘗試或數量矛盾,輸入無效。

使用已填個案

原創假設輸入及確切答案鍵
個案已提供輸入預期結構化結果判斷及原因
各題重複次數不同{"cases":[{"pass":9,"attempts":10},{"pass":0,"attempts":1}]}{"attemptWeighted":["9","11"],"caseWeighted":["9","20"]}合次數得 9/11;每題等權得 (9/10+0)÷2=9/20。
各題重複次數一樣{"cases":[{"pass":1,"attempts":2},{"pass":2,"attempts":2}]}{"attemptWeighted":["3","4"],"caseWeighted":["3","4"]}此例次數相同,兩種加權規則結果一致。
通過數超過嘗試數{"cases":[{"pass":3,"attempts":2}]}{"error":"counts"}記錄矛盾,不計分數。
下載可編輯 CSV ↓

逐步處理 more-passes-than-attempts 個案,須得到甚麼結果?原因是甚麼?

查看參考答案

{"error":"counts"}。記錄矛盾,不計分數。

執行完整本機驗算

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

function evaluate(x){
 const gcd=(a,b)=>b?gcd(b,a%b):a,reduce=(n,d)=>{const g=gcd(n,d);return [n/g,d/g];},text=([n,d])=>[n.toString(),d.toString()];
 if(x.cases.length<1||x.cases.length>100||x.cases.some(c=>!Number.isInteger(c.pass)||!Number.isInteger(c.attempts)||c.attempts<1||c.attempts>10000||c.pass<0||c.pass>c.attempts))return {error:'counts'};
 let n=0n,d=1n,passes=0n,attempts=0n;for(const c of x.cases){const a=BigInt(c.attempts),p=BigInt(c.pass);n=n*a+p*d;d*=a;[n,d]=reduce(n,d);passes+=p;attempts+=a;}
 return {attemptWeighted:text(reduce(passes,attempts)),caseWeighted:text(reduce(n,d*BigInt(x.cases.length)))};
}

const cases = [
  {
    "id": "unequal-repeats",
    "input": {
      "cases": [
        {
          "pass": 9,
          "attempts": 10
        },
        {
          "pass": 0,
          "attempts": 1
        }
      ]
    },
    "expected": {
      "attemptWeighted": [
        "9",
        "11"
      ],
      "caseWeighted": [
        "9",
        "20"
      ]
    }
  },
  {
    "id": "equal-repeats",
    "input": {
      "cases": [
        {
          "pass": 1,
          "attempts": 2
        },
        {
          "pass": 2,
          "attempts": 2
        }
      ]
    },
    "expected": {
      "attemptWeighted": [
        "3",
        "4"
      ],
      "caseWeighted": [
        "3",
        "4"
      ]
    }
  },
  {
    "id": "more-passes-than-attempts",
    "input": {
      "cases": [
        {
          "pass": 3,
          "attempts": 2
        }
      ]
    },
    "expected": {
      "error": "counts"
    }
  }
];
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)}));
下載可執行例子 ↓

驗收報告須列採用哪個加權單位。多試一條容易題可改合次數比例,但未必改等權結果;兩者都不估真實工作分布。

相關資源