訂判斷及所需輸入
題內人手及掃描器兩個可能來源,都是 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}]}]} |
跑所附比較
錯路仍把輸入當掃描器來源;更正保 physicalOrigin 未明,不提出通用速度辨識法。
| 路徑 | 輸出 JSON |
|---|---|
| 錯誤路徑 | {"route":"scanner","physicalOrigin":"scanner","sameObservedTrace":true,"timingCanDistinguish":false} |
| 所需路徑 | {"route":"manual","physicalOrigin":"unknown","sameObservedTrace":true,"timingCanDistinguish":false} |
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);}
按邊界依據作判斷
明選掃描模式,真正來源仍未明。模式欠缺便停;兩組不同紀錄不屬此相同觀察例子,也不自動分類。
- 比較完整紀錄
- 來源未分清便照留未明
- 路由另作明確選擇
字出得快,不等於硬件身分依據。
| 條件 | 輸入 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} |
選掃描模式,可證明字來自掃描器嗎?
查看參考答案
不能,只選捕捉路由。相同觀察仍符合題內兩個可能來源。