跳至內容
Astera Technology

捕捉模式與猜測輸入來源要分開

先比完全相同的紀錄,不把時間當硬件身分。

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

訂判斷及所需輸入

題內人手及掃描器兩個可能來源,都是 A、1、2,在0、5、10 出現。程序按次序核每個鍵及時間,兩段完全相同,分不出來源。明選手動或掃描捕捉模式,只選路由,未證實真正設備。

已填本地測試工作表
情況輸入 JSON
原例測試{"captureMode":"manual","traces":[{"candidateOrigin":"human","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]},{"candidateOrigin":"scanner","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]}]}
下載可編輯 CSV ↓

跑所附比較

錯路仍把輸入當掃描器來源;更正保 physicalOrigin 未明,不提出通用速度辨識法。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"route":"scanner","physicalOrigin":"scanner","sameObservedTrace":true,"timingCanDistinguish":false}
所需路徑{"route":"manual","physicalOrigin":"unknown","sameObservedTrace":true,"timingCanDistinguish":false}
下載可編輯 CSV ↓
完整本地 Node24.14.1 程序
import assert from 'node:assert/strict';

const run=function run(i,corrected=true){
    if(!['scanner','manual'].includes(i.captureMode))return {held:true};
    const signature=trace=>trace.events.map(event=>[event.key,event.at]);
    const sameObservedTrace=i.traces.length===2&&JSON.stringify(signature(i.traces[0]))===JSON.stringify(signature(i.traces[1]));
    if(!sameObservedTrace)return {held:true,reason:'outside-matched-trace-example'};
    return {route:corrected?i.captureMode:'scanner',physicalOrigin:corrected?'unknown':'scanner',sameObservedTrace,timingCanDistinguish:!sameObservedTrace};
  };
const cases=[{"input":{"captureMode":"manual","traces":[{"candidateOrigin":"human","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]},{"candidateOrigin":"scanner","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]}]},"corrected":false,"expected":{"route":"scanner","physicalOrigin":"scanner","sameObservedTrace":true,"timingCanDistinguish":false}},{"input":{"captureMode":"manual","traces":[{"candidateOrigin":"human","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]},{"candidateOrigin":"scanner","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]}]},"corrected":true,"expected":{"route":"manual","physicalOrigin":"unknown","sameObservedTrace":true,"timingCanDistinguish":false}},{"input":{"captureMode":"scanner","traces":[{"candidateOrigin":"human","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]},{"candidateOrigin":"scanner","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]}]},"corrected":true,"expected":{"route":"scanner","physicalOrigin":"unknown","sameObservedTrace":true,"timingCanDistinguish":false}},{"input":{"captureMode":null,"traces":[]},"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
明選掃描捕捉模式{"captureMode":"scanner","traces":[{"candidateOrigin":"human","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]},{"candidateOrigin":"scanner","events":[{"key":"A","at":0},{"key":"1","at":5},{"key":"2","at":10}]}]}{"route":"scanner","physicalOrigin":"unknown","sameObservedTrace":true,"timingCanDistinguish":false}
尚未選模式{"captureMode":null,"traces":[]}{"held":true}
下載可編輯 CSV ↓

選掃描模式,可證明字來自掃描器嗎?

查看參考答案

不能,只選捕捉路由。相同觀察仍符合題內兩個可能來源。

相關資源