跳至內容
Astera Technology

排程暫停後,恢復從哪個觸發開始?

欠跑觸發及補跑規則都要明列。

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

訂判斷及所需輸入

本例第五分鐘停、二十五恢復,每十分鐘一輪,欠了十及二十。補跑規則兩輪都在二十五執行,再到三十;只跑未來則明記十、二十已跳,下一輪仍三十。單說恢復未選定規則。

已填本地測試工作表
情況輸入 JSON
原例測試{"mode":"replay","triggers":[10,20],"pause":5,"resume":25,"interval":10}
下載可編輯 CSV ↓

跑所附比較

可執行事件清單分開保原定及真正執行時間,只展開題內本地觸發;重跑此清單不會做外部動作。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"events":[{"scheduled":30,"actual":30}],"skipped":[10,20]}
所需路徑{"events":[{"scheduled":10,"actual":25},{"scheduled":20,"actual":25},{"scheduled":30,"actual":30}],"skipped":[]}
下載可編輯 CSV ↓
完整本地 Node24.14.1 程序
import assert from 'node:assert/strict';

const run=function run(i,corrected=true){
    if(!['replay','future-only'].includes(i.mode))return {held:true};
    const missed=i.triggers.filter(t=>t>i.pause&&t<=i.resume),next=(Math.floor(i.resume/i.interval)+1)*i.interval;
    const replay=corrected&&i.mode==='replay';return {events:[...(replay?missed.map(scheduled=>({scheduled,actual:i.resume})):[]),{scheduled:next,actual:next}],skipped:replay?[]:missed};
  };
const cases=[{"input":{"mode":"replay","triggers":[10,20],"pause":5,"resume":25,"interval":10},"corrected":false,"expected":{"events":[{"scheduled":30,"actual":30}],"skipped":[10,20]}},{"input":{"mode":"replay","triggers":[10,20],"pause":5,"resume":25,"interval":10},"corrected":true,"expected":{"events":[{"scheduled":10,"actual":25},{"scheduled":20,"actual":25},{"scheduled":30,"actual":30}],"skipped":[]}},{"input":{"mode":"future-only","triggers":[10,20],"pause":5,"resume":25,"interval":10},"corrected":true,"expected":{"events":[{"scheduled":30,"actual":30}],"skipped":[10,20]}},{"input":{"mode":"future-only","triggers":[10,20,30],"pause":5,"resume":30,"interval":10},"corrected":true,"expected":{"events":[{"scheduled":40,"actual":40}],"skipped":[10,20,30]}},{"input":{"mode":null,"triggers":[],"pause":5,"resume":25,"interval":10},"corrected":true,"expected":{"held":true}}];
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
明訂只跑之後輪次{"mode":"future-only","triggers":[10,20],"pause":5,"resume":25,"interval":10}{"events":[{"scheduled":30,"actual":30}],"skipped":[10,20]}
恢復時刻剛好在分界{"mode":"future-only","triggers":[10,20,30],"pause":5,"resume":30,"interval":10}{"events":[{"scheduled":40,"actual":40}],"skipped":[10,20,30]}
恢復規則未知{"mode":null,"triggers":[],"pause":5,"resume":25,"interval":10}{"held":true}
下載可編輯 CSV ↓

原例補跑規則怎樣處理兩個欠跑觸發?

查看參考答案

原定仍十、二十,真正都在二十五跑;不靜靜丟掉,也不改成原定二十五。

相關資源