跳至內容
Astera Technology

席位按帳戶、活躍還是同時使用計?

同一組帳戶資料,按各份報價的席位定義分開計。

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

訂判斷及所需輸入

本例三份假設報價採不同單位。名冊有十二帳戶,指定月份八個有活躍標記;題內同時使用紀錄已列齊變化,最多三個不同帳戶。若報價按具名帳戶收席位,就須用十二,不能換成三。

已填本地測試工作表
情況輸入 JSON
原例測試{"basis":"named","traceComplete":true,"accounts":[{"id":1,"active":true},{"id":2,"active":true},{"id":3,"active":true},{"id":4,"active":true},{"id":5,"active":true},{"id":6,"active":true},{"id":7,"active":true},{"id":8,"active":true},{"id":9,"active":false},{"id":10,"active":false},{"id":11,"active":false},{"id":12,"active":false}],"samples":[{"accounts":[1,2]},{"accounts":[1,2,3]}]}
下載可編輯 CSV ↓

跑所附比較

數量旁須寫計法。這些是題內比較資料,並非客戶用量結果。真正示範要先訂清收費單位及紀錄是否完整,才可據此判斷高峰。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"basis":"named","count":3}
所需路徑{"basis":"named","count":12}
下載可編輯 CSV ↓
完整本地 Node24.14.1 程序
import assert from 'node:assert/strict';

const run=function run(i,corrected=true){
    if(!['named','active','concurrent'].includes(i.basis))return {held:true,reason:'unit-basis-missing'};
    if(corrected&&i.basis==='concurrent'&&i.traceComplete!==true)return {held:true,reason:'concurrency-trace-incomplete'};
    const named=i.accounts.length,active=i.accounts.filter(a=>a.active).length;
    const concurrent=Math.max(0,...i.samples.map(s=>new Set(s.accounts).size));
    return {basis:i.basis,count:corrected?({named,active,concurrent})[i.basis]:concurrent};
  };
const cases=[{"input":{"basis":"named","traceComplete":true,"accounts":[{"id":1,"active":true},{"id":2,"active":true},{"id":3,"active":true},{"id":4,"active":true},{"id":5,"active":true},{"id":6,"active":true},{"id":7,"active":true},{"id":8,"active":true},{"id":9,"active":false},{"id":10,"active":false},{"id":11,"active":false},{"id":12,"active":false}],"samples":[{"accounts":[1,2]},{"accounts":[1,2,3]}]},"corrected":false,"expected":{"basis":"named","count":3}},{"input":{"basis":"named","traceComplete":true,"accounts":[{"id":1,"active":true},{"id":2,"active":true},{"id":3,"active":true},{"id":4,"active":true},{"id":5,"active":true},{"id":6,"active":true},{"id":7,"active":true},{"id":8,"active":true},{"id":9,"active":false},{"id":10,"active":false},{"id":11,"active":false},{"id":12,"active":false}],"samples":[{"accounts":[1,2]},{"accounts":[1,2,3]}]},"corrected":true,"expected":{"basis":"named","count":12}},{"input":{"basis":"active","accounts":[{"id":1,"active":true},{"id":2,"active":false}],"samples":[{"accounts":[1]}]},"corrected":true,"expected":{"basis":"active","count":1}},{"input":{"basis":null,"accounts":[],"samples":[]},"corrected":true,"expected":{"held":true,"reason":"unit-basis-missing"}},{"input":{"basis":"concurrent","traceComplete":false,"accounts":[{"id":1,"active":true},{"id":2,"active":true}],"samples":[{"accounts":[1,2]}]},"corrected":true,"expected":{"held":true,"reason":"concurrency-trace-incomplete"}},{"input":{"basis":"concurrent","traceComplete":true,"accounts":[{"id":1,"active":true},{"id":2,"active":true}],"samples":[{"accounts":[1,1,2]},{"accounts":[1]}]},"corrected":true,"expected":{"basis":"concurrent","count":2}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
下載可執行例子 ↓

按邊界依據作判斷

活躍模式的邊界只有一個活躍帳戶。缺席位定義便暫停,不能挑最小數補上。

  1. 先核報價計法
  2. 取對應的觀察數
  3. 把計法連數量記下

計法未訂,或紀錄未齊,先暫停判斷高峰是否足夠。

可編輯邊界輸入及結果
條件輸入 JSON預期輸出 JSON
按月內活躍計{"basis":"active","accounts":[{"id":1,"active":true},{"id":2,"active":false}],"samples":[{"accounts":[1]}]}{"basis":"active","count":1}
席位計法欠缺{"basis":null,"accounts":[],"samples":[]}{"held":true,"reason":"unit-basis-missing"}
同時使用紀錄未齊{"basis":"concurrent","traceComplete":false,"accounts":[{"id":1,"active":true},{"id":2,"active":true}],"samples":[{"accounts":[1,2]}]}{"held":true,"reason":"concurrency-trace-incomplete"}
完整紀錄按不同帳戶計{"basis":"concurrent","traceComplete":true,"accounts":[{"id":1,"active":true},{"id":2,"active":true}],"samples":[{"accounts":[1,1,2]},{"accounts":[1]}]}{"basis":"concurrent","count":2}
下載可編輯 CSV ↓

原例按具名帳戶報價,應填幾個席位?

查看參考答案

十二。八是月內活躍,三是題內同時使用高峰,均不會改變按帳戶的單位。

相關資源