Make the noise floor and judge audit belong to the axis so the en panel gets its own threshold and cannot read any axis raw cells
This commit is contained in:
parent
1f66b354fe
commit
969ad2f8dc
2 changed files with 25 additions and 11 deletions
|
|
@ -84,6 +84,14 @@ ARM_KIND = {"A1": "flags", "A1B": "flags", "A6F": "flags", "A4": "canonfix",
|
|||
"J2": "onepass"}
|
||||
|
||||
|
||||
def phase_letter(arm: str) -> str:
|
||||
"""Буква фазы в теге. Одна на все теги оси — включая половины шумового пола."""
|
||||
P = pair()
|
||||
if P.key == "zh-ru":
|
||||
return "f" if arm.startswith("A6") else "a"
|
||||
return "g" if arm == "E6" else {"en-ru": "b", "ja-ru": "c"}[P.key]
|
||||
|
||||
|
||||
def phase_of(arm: str) -> str:
|
||||
"""Фаза кассы арма. Должна совпадать с буквой в `tag`, иначе трата уедет мимо потолка."""
|
||||
P = pair()
|
||||
|
|
@ -412,11 +420,7 @@ def tag(arm: str, uid: str, part: str = "") -> str:
|
|||
# Буква в теге — ФАЗА КАССЫ, а не пара: глоб `dv-b-*` покрывает ФД-B, `dv-a-*` — ФД-A.
|
||||
# Пар-префикс, стоявший здесь до 14.08, давал `dv-en-…`, который не покрыт ни одним глобом,
|
||||
# и покупка отверглась бы гейтом кассы — лучше так, чем мимо потолка, но работать нельзя.
|
||||
P = pair()
|
||||
if P.key == "zh-ru":
|
||||
ph = "f" if arm.startswith("A6") else "a"
|
||||
else:
|
||||
ph = "g" if arm == "E6" else {"en-ru": "b", "ja-ru": "c"}[P.key]
|
||||
ph = phase_letter(arm)
|
||||
return f"dv-{ph}-{arm.lower()}{('-' + part) if part else ''}-{uid}"
|
||||
|
||||
|
||||
|
|
@ -711,19 +715,25 @@ def cmd_floor() -> None:
|
|||
эксп-23 `CTRLfloorA` совпал с армом `T1` побайтно в 16/16, и контроль оказался пуст.
|
||||
Половины судят РАЗНЫЕ сессии (это забота судейского рига, здесь — только генерация).
|
||||
"""
|
||||
led = MONEY.Guarded("ФД-A")
|
||||
old = [u for u in P22.M.units_zh() if u["uid"] not in EXCLUDED]
|
||||
for u in old:
|
||||
# ⚠ Пол принадлежит ОСИ, а не китайскому паку: касса, буква тега и состав единиц берутся
|
||||
# у текущей пары. Прежняя редакция звала `ФД-A` и `units_zh()` безусловно, то есть на
|
||||
# английской оси купила бы китайский пол в китайскую кассу — и порог оси считался бы по
|
||||
# чужому шуму. Критик-арм передаётся, потому что у осей он называется по-разному.
|
||||
crit_arm = "A3" if pair().key == "zh-ru" else "E3"
|
||||
led = MONEY.Guarded(phase_of(crit_arm))
|
||||
src_units = ([u for u in P22.M.units_zh() if u["uid"] not in EXCLUDED]
|
||||
if pair().key == "zh-ru" else units_ok())
|
||||
for u in src_units:
|
||||
uid, src = u["uid"], u["source"]
|
||||
draft = base_draft(uid)
|
||||
if not draft.strip():
|
||||
continue
|
||||
places, _ = critic_places("A3", uid)
|
||||
places, _ = critic_places(crit_arm, uid)
|
||||
if not places:
|
||||
print(f" {uid}: мест нет — единица в пол не идёт")
|
||||
continue
|
||||
for half in ("flo1", "flo2"):
|
||||
tg = f"dv-a-{half}-{uid}"
|
||||
tg = f"dv-{phase_letter(crit_arm)}-{half}-{uid}"
|
||||
if (OUT / f"{tg}.json").exists():
|
||||
continue
|
||||
_buy(led, tg, fix_msgs(src, draft, places),
|
||||
|
|
|
|||
|
|
@ -239,7 +239,11 @@ def emit(half: int) -> None:
|
|||
f"ключ → {KEYS} (судье НЕ давать)")
|
||||
|
||||
|
||||
FORBIDDEN = ("blind-keys", "dv-a-", "dv-f-", "/books/dovodka", "contour.py", "sud.py")
|
||||
# ⚠ Список запретов — ПО ВСЕМ осям, а не по своей. Судья английской оси, заглянувший в `dv-a-`,
|
||||
# так же скомпрометирован, как заглянувший в `dv-b-`: он увидит сырьё с полем `arm` и перестанет
|
||||
# быть слепым. Перечисляем все префиксы фазы, а не только свой.
|
||||
FORBIDDEN = ("blind-keys", "dv-a-", "dv-b-", "dv-c-", "dv-f-", "dv-g-",
|
||||
"/books/dovodka", "contour.py", "sud.py", "en_axis.py", "ja_axis.py")
|
||||
|
||||
|
||||
def audit(tr_dir: Path) -> int:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue