"""本主题专属离线算法，仅读取同目录合成JSON，不联网、不控制设备。"""
import csv, json, math, re, struct
from pathlib import Path
from fractions import Fraction
BASE=Path(__file__).resolve().parent
data=json.loads((BASE/'input.json').read_text(encoding='utf-8'))['data']
running=None;pending=None;values=[];events=[];orphans=[]
for b in bytes.fromhex(data['hex']):
 if b==0xf8:events.append({'type':'clock'});continue
 if b>=0x80:
  values=[]
  if 0x80<=b<=0xef:
   assert b>>4 in (8,9);running=b;pending=b
  elif b==0xf1:running=None;pending=b
  else:raise ValueError('未实现的消息')
  continue
 if pending is None:
  if running is None:orphans.append(b);continue
  pending=running
 values.append(b);needed=1 if pending==0xf1 else 2
 if len(values)==needed:
  events.append({'type':'quarter_frame' if pending==0xf1 else 'note','status':pending,'data':values[:]})
  pending=None;values=[]
assert sum(e['type']=='note' for e in events)==2 and orphans==[62,32]
result={'events':events,'orphan_data_bytes':orphans,'remaining_partial':values,'supported_subset_only':True}
(BASE/'result.json').write_text(json.dumps(result,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
print(json.dumps(result,ensure_ascii=False))
