跳至內容
Astera Technology

啟動快慢,要在同一條件下比較

冷啟動及已熱身觀察先分開,才計方案平均。

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

訂判斷及所需輸入

假設觀察 A 冷啟動8、9 秒,已熱身1、2;B 冷啟動10、12。所需比較是冷,平均應8.5、11。拿 A 熱身平均1.5 配 B 冷11,就把測試條件說錯。

已填本地測試工作表
情況輸入 JSON
原例測試{"condition":"cold","observations":[{"offer":"A","condition":"cold","seconds":8},{"offer":"A","condition":"cold","seconds":9},{"offer":"A","condition":"warm","seconds":1},{"offer":"A","condition":"warm","seconds":2},{"offer":"B","condition":"cold","seconds":10},{"offer":"B","condition":"cold","seconds":12}]}
下載可編輯 CSV ↓

跑所附比較

可執行選取先配條件才計平均。時間只是題內紀錄,不是供應商實測或未來服務預測。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"condition":"cold","means":{"A":1.5,"B":11}}
所需路徑{"condition":"cold","means":{"A":8.5,"B":11}}
下載可編輯 CSV ↓
完整本地 Node24.14.1 程序
import assert from 'node:assert/strict';

const run=function run(i,corrected=true){
    if(!['warm','cold'].includes(i.condition)||i.observations.some(r=>!Number.isFinite(r.seconds)||r.seconds<0))return {held:true};
    const groups={A:i.observations.filter(r=>r.offer==='A'&&r.condition===(corrected?i.condition:'warm')),B:i.observations.filter(r=>r.offer==='B'&&r.condition===i.condition)};
    const missing=Object.keys(groups).filter(k=>groups[k].length===0);if(missing.length)return {held:true,missing};
    const means=Object.fromEntries(Object.entries(groups).map(([k,rs])=>[k,rs.reduce((s,r)=>s+r.seconds,0)/rs.length]));return {condition:i.condition,means};
  };
const cases=[{"input":{"condition":"cold","observations":[{"offer":"A","condition":"cold","seconds":8},{"offer":"A","condition":"cold","seconds":9},{"offer":"A","condition":"warm","seconds":1},{"offer":"A","condition":"warm","seconds":2},{"offer":"B","condition":"cold","seconds":10},{"offer":"B","condition":"cold","seconds":12}]},"corrected":false,"expected":{"condition":"cold","means":{"A":1.5,"B":11}}},{"input":{"condition":"cold","observations":[{"offer":"A","condition":"cold","seconds":8},{"offer":"A","condition":"cold","seconds":9},{"offer":"A","condition":"warm","seconds":1},{"offer":"A","condition":"warm","seconds":2},{"offer":"B","condition":"cold","seconds":10},{"offer":"B","condition":"cold","seconds":12}]},"corrected":true,"expected":{"condition":"cold","means":{"A":8.5,"B":11}}},{"input":{"condition":"warm","observations":[{"offer":"A","condition":"warm","seconds":1}]},"corrected":true,"expected":{"held":true,"missing":["B"]}},{"input":{"condition":"warm","observations":[{"offer":"A","condition":"warm","seconds":1},{"offer":"A","condition":"warm","seconds":2},{"offer":"B","condition":"warm","seconds":2},{"offer":"B","condition":"warm","seconds":3}]},"corrected":true,"expected":{"condition":"warm","means":{"A":1.5,"B":2.5}}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
下載可執行例子 ↓

按邊界依據作判斷

比較熱身卻欠 B 熱身觀察,要停;兩組都齊時1.5、2.5 才可按那另一條件比。

  1. 訂所需啟動條件
  2. 兩方案各取相符觀察
  3. 才計平均及標條件

相符觀察欠缺便保未知,不等於慢或失敗。

可編輯邊界輸入及結果
條件輸入 JSON預期輸出 JSON
欠相同條件的方案觀察{"condition":"warm","observations":[{"offer":"A","condition":"warm","seconds":1}]}{"held":true,"missing":["B"]}
兩方案熱身觀察齊備{"condition":"warm","observations":[{"offer":"A","condition":"warm","seconds":1},{"offer":"A","condition":"warm","seconds":2},{"offer":"B","condition":"warm","seconds":2},{"offer":"B","condition":"warm","seconds":3}]}{"condition":"warm","means":{"A":1.5,"B":2.5}}
下載可編輯 CSV ↓

原例冷啟動比較,應用哪兩個平均?

查看參考答案

A 8.5 秒、B 11 秒。A 1.5 屬已熱身,不能改標冷啟動。

相關資源