"""本主题专属离线算法，仅读取同目录合成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']
cabs=data['cabinets'];budgets=data['synthetic_pixel_budgets'];assert len({c['id'] for c in cabs})==len(cabs)
ports={p:[] for p in budgets}
for c in cabs:
 assert c['port'] in ports and c['w']>0 and c['h']>0
 ports[c['port']].append(c)
rows=[]
for port,items in ports.items():
 count=sum(c['w']*c['h'] for c in items);budget=budgets[port]
 rows.append({'port':port,'cabinet_ids':[c['id'] for c in items],'pixels':count,'synthetic_budget':budget,'headroom':budget-count,'within_synthetic_budget':count<=budget})
total=sum(r['pixels'] for r in rows)
assert total==335872 and [r['pixels'] for r in rows]==[102400,102400,65536,65536]
assert total<sum(budgets.values()) and any(not r['within_synthetic_budget'] for r in rows)
result={'ports':rows,'total_pixels':total,'total_synthetic_budget':sum(budgets.values()),'budgets_are_real_hardware_ratings':False}
(BASE/'result.json').write_text(json.dumps(result,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
print(json.dumps(result,ensure_ascii=False))
