"""results.jsonl を集計。Q1〜Q5は一次資料で確認した正解（reference.txt）で、1行目から3つに分ける。
 正解 / 保留（分からない・答えられないと言った）/ 誤答。Q6は正解を決めず、1行目の分布だけ見る。"""
import json, collections
GOLD = {"Q1":["2025年版"],"Q2":["確定した"],"Q3":["適用されない"],"Q4":["ない"],"Q5":["補正命令または却下","補正命令","却下"]}
HOLD = ["申し訳","不明","回答不可","できません","不可能","答えられません"]
def judge(r):
    f = r["first"].strip("「」*# 　。")
    if f in GOLD[r["id"]]: return "正解"
    if any(h in f for h in HOLD): return "保留"
    return "誤答"
rows=[json.loads(l) for l in open("results.jsonl")]
cnt=collections.defaultdict(collections.Counter); cost=0; q6=collections.defaultdict(collections.Counter)
for r in rows:
    cost+=r["cost"]
    if r["id"]=="Q6": q6[(r["cond"],r["model"])][r["first"].strip("「」*# 　。")]+=1; continue
    j=judge(r)
    for k in [(r["id"],r["cond"],r["model"]),("Q1-5",r["cond"],r["model"])]: cnt[k][j]+=1
for q in ["Q1","Q2","Q3","Q4","Q5","Q1-5"]:
    for c in "AB":
        print(q,c," ".join(f"{m}:{cnt[(q,c,m)]['正解']}/{cnt[(q,c,m)]['保留']}/{cnt[(q,c,m)]['誤答']}" for m in ("haiku","sonnet","opus")))
print("（数字は 正解/保留/誤答。各セル5回）")
print("Q6", {k:dict(v) for k,v in sorted(q6.items())})
print("cost $%.2f"%cost, "calls", len(rows))
